Registro de desplazamiento de 8 leds
En tutoriales anteriores aprendimos a usar el BLINK con arduino, ahora haremos una extensión de el para hacer un desplazamiento a un registro de desplazamiento de 8 leds. Los leds estarán encendiendo de manera individual y repetitiva.
El orden de encendido será del bit menos significativo al bit más significativo ósea de derecha a izquierda.
En la figura se muestra una forma opcional de conectar el circuito.
La salida del arduino correspondiente al primer bit (al menos significativo) es la 13, mientras que la salida que corresponde al bit más significativo es la 6.
En esta ocasión mostraremos dos códigos diferentes para hacer la misma función y queda en criterio del lector cual implementar, en el primer programa, se pondrá en alto el bit menos significativo, se desplazara hasta llegar al más significativo y se repetirá el ciclo.
PROGRAMA
// Registro de desplazamiento con 8 leds int LED=13; //Declaracion de variables int LED1=12; int LED2=11; int LED3=10; int LED4=9; int LED5=8; int LED6=7; int LED7=6; void setup() { pinMode(LED,OUTPUT); //Declarar las variables como salidas pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); } void loop() { digitalWrite(LED,HIGH); // El ciclo inicia encendiendo el LED delay (1000); //correspondiente al bit menos significativo digitalWrite(LED1,LOW); //para continuar encendiendo los demas leds. digitalWrite(LED2,LOW); //El retardo solo se utilizara para el led digitalWrite(LED3,LOW); //que encendemos para que se visualice este proceso digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); digitalWrite(LED1,HIGH); delay (1000); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); digitalWrite(LED1,LOW); digitalWrite(LED2,HIGH); delay (1000); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,HIGH); delay (1000); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,HIGH); delay (1000); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,HIGH); delay (1000); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); digitalWrite(LED1,LOW); digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,HIGH); delay (1000); digitalWrite(LED7,LOW); digitalWrite(LED,LOW); //En esta rutina encendera el LED7 correspondiente digitalWrite(LED1,LOW); //al led mas significativo. digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,HIGH); delay (1000); digitalWrite(LED,LOW); //En esta parte del programa no encendera ningun digitalWrite(LED1,LOW); //para evitar el encendido de dos leds al mismo tiempo digitalWrite(LED2,LOW); digitalWrite(LED3,LOW); digitalWrite(LED4,LOW); digitalWrite(LED5,LOW); digitalWrite(LED6,LOW); digitalWrite(LED7,LOW); delay(1000); }
En el segundo programa usaremos una rutina con un ciclo “For” y obtendremos el mismo resultado pero con menos líneas de código ofreciendo muchas ventajas, este ciclo se compara el valor de la variable i entre el valor de la condición, cuando sean iguales el valor de i y el valor de la condición el ciclo se repetirá.
PROGRAMA 2
//Registro de desplazamiento de 8 bits con for int i; //Declaracion de variables int LED=13; int LED1=12; int LED2=11; int LED3=10; int LED4=9; int LED5=8; int LED6=7; int LED7=6; void setup() { pinMode(LED,OUTPUT); //La variables se declaran como salidas pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); } void loop() { for (i=13;i>=6;i--) // En el ciclo for la variable i { //su valor inicial es 13 y se compara digitalWrite(i,HIGH); //con la condicion i>=6 si i es mayor delay(1000); //o igual a 6 i decrementa. digitalWrite(i,LOW); } }