Capítulo 7. Uso de parámetros Tipos de variables y su ámbito

Imágenes

Códigos

Uso de funciones y puerto serie. Control de colores por potenciómetro en un RGB

int enciendeColor(int pinEntrada, int pinSalida){
//Leemos el pin de Entrada
int valorLeido=analogRead(pinEntrada);
//Realizamos la conversión
int valorEscrito=map(valorLeido,0,1023,0,255);
//Escribimos el valor en la patilla RGB que se nos pida
analogWrite(pinSalida,valorEscrito);
//Finalizada la función, devolvemos el valor de salida
return valorEscrito;
}
void setup() {
//declaramos los pines de salida
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
//Inicializamos el puerto serie
Serial.begin(9600);
}
void loop() {
//Escribimos el color azul y asignamos el valor que devuelve la función a una variable
int valAzul=enciendeColor(0,11);
//Escribimos el color verde y asignamos el valor que devuelve la función a una variable
int valVerde=enciendeColor(1,10);
//Escribimos el color rojo y asignamos el valor que devuelve la función a una variable
int valRojo=enciendeColor(2,9);
//Pasamos los valores por el puerto serie:
Serial.print(“Color azul: “);
Serial.print(valAzul);
//Tabulación
Serial.print(“\t");
Serial.print(“Color verde: “);
Serial.print(valVerde);
//Tabulación
Serial.print(“\t“);
Serial.print(“Color rojo: “);
//Escribimos último valor y hacemos un salto de carro
Serial.println(valRojo);
//Esta pequeña espera es para dar legibilidad a la pantalla
delay(100);
}

Experimentando con la naturaleza de las variables char

//Declaramos la variable char
char valor;
void setup() {
//Inicializamos el puerto serie
Serial.begin(9600);
//Asignamos 'a' a valor mediante comillas simples
valor='a';
}
void loop() {
// Pasamos "valor" por el puerto serie e incrementamos en una unidad
Serial.println(valor);
valor++;
delay(1000);
}

Programa básico para aprender a recorrer una matriz

//Declaramos la matriz de valores de tipo float
float valores[5][3];
void setup() {
//Inicializamos el puerto serie
Serial.begin(9600);
//Usamos dos bucles anidados para recorrer la matriz y dar un valor
for (int i=0;i<5;i++){
for (int x=0;x<3;x++){
valores[i][x]=random(10);
}
}
//Recorremos de nuevo la matriz y pasamos el valor por el puerto serie
for (int i=0;i<5;i++){
for (int x=0;x<3;x++){
Serial.print("En la dimensión ");
Serial.print(i);
Serial.print(", ");
Serial.print(x);
Serial.print(" se ha guardado el número: ");
Serial.println(valores[i][x]);
}
}
}
void loop() {
//Esta función está vacía esta vez
}

Knight Rider (obra de David Cuartielles y Aaron Hallborg)

/* Knight Rider 1
--------------
*
Basically an extension of Blink_LED.
*
*
(cleft) 2005 K3, Malmo University
@author: David Cuartielles
@hardware: David Cuartielles, Aaron Hallborg
*/
int pin2 = 2;
int pin3 = 3;
int pin4 = 4;
int pin5 = 5;
int pin6 = 6;
int pin7 = 7;
int pin8=8;
int pin9=9;
int pin10=10;
int pin11=11;
int pin12=12;
int pin13=13;
int timer = 100;
void setup(){
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(pin9, OUTPUT);
pinMode(pin10, OUTPUT);
pinMode(pin11, OUTPUT);
pinMode(pin12, OUTPUT);
pinMode(pin13, OUTPUT);
}
void loop() {
digitalWrite(pin2, HIGH);
delay(timer);
digitalWrite(pin2, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin7, HIGH);
delay(timer);
digitalWrite(pin7, LOW);
delay(timer);
digitalWrite(pin8, HIGH);
delay(timer);
digitalWrite(pin8, LOW);
delay(timer);
digitalWrite(pin9, HIGH);
delay(timer);
digitalWrite(pin9, LOW);
delay(timer);
digitalWrite(pin10, HIGH);
delay(timer);
digitalWrite(pin10, LOW);
delay(timer);
digitalWrite(pin11, HIGH);
delay(timer);
digitalWrite(pin11, LOW);
delay(timer);
digitalWrite(pin12, HIGH);
delay(timer);
digitalWrite(pin12, LOW);
delay(timer);
digitalWrite(pin13, HIGH);
delay(timer);
digitalWrite(pin13, LOW);
delay(timer);
digitalWrite(pin12, HIGH);
delay(timer);
digitalWrite(pin12, LOW);
delay(timer);
digitalWrite(pin11, HIGH);
delay(timer);
digitalWrite(pin11, LOW);
delay(timer);
digitalWrite(pin10, HIGH);
delay(timer);
digitalWrite(pin10, LOW);
delay(timer);
digitalWrite(pin9, HIGH);
delay(timer);
digitalWrite(pin9, LOW);
delay(timer);
digitalWrite(pin8, HIGH);
delay(timer);
digitalWrite(pin8, LOW);
delay(timer);
digitalWrite(pin7, HIGH);
delay(timer);
digitalWrite(pin7, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
}

Knight Rider usando matrices para abreviar (obra de David Cuartielles y Aaron Hallborg)

/*Knight Rider 3
--------------
*
This example concentrates on making the visuals fluid.
*
*
(cleft) 2005 K3, Malmo University
@author: David Cuartielles
@hardware: David Cuartielles, Aaron Hallborg
*/
int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int count = 0;
int timer = 30;
void setup(){
for (count=0;count<12;count++) {
pinMode(pinArray[count], OUTPUT);
}
}
void loop() {
//Bucle creciente (recorremos cada pin y el siguiente)
for (count=0;count<11;count++) {
digitalWrite(pinArray[count], HIGH);
delay(timer);
digitalWrite(pinArray[count + 1], HIGH);
delay(timer);
digitalWrite(pinArray[count], LOW);
delay(timer*2); } //Bucle decreciente (recorremos cada pin y el anterior) for (count=11;count>0;count--) { digitalWrite(pinArray[count], HIGH); delay(timer); digitalWrite(pinArray[count - 1], HIGH); delay(timer); digitalWrite(pinArray[count], LOW); delay(timer*2);