Ejercicio 6: Ruleta luminosa

Los LEDs se van encendiendo y apagando en una secuencia.

Novedades hardwareNovedades software
  

Requisitos:

  • Cinco diodos luminosos LED
  • Cuatro resistencias de 220 ohmios.

Planteamiento: Crear un carrusel de luz que produzca una ilusión de movimiento con los LEDs encendiéndose y apagándose en secuencia consecutiva.

Presentación de: Cómo activar/desactivar en secuencia varias salidas digitales.

Este ejercicio refuerza el uso de la iteración. Ahora la usamos para activar y desactivar cada salida digital en el orden en que las definimos en la lista.

El valor inicial de la variable que usamos como contador en la iteración se expresa con un “=”. El valor final ha de expresarse como “>”,“<”,“>=” ó “<=”. Nota cómo los dos últimos incluyen un valor más que los dos primeros.

La forma en que cambia esta variable se expresa:

n++ para un aumento de uno en uno
n- - para una disminución de uno en uno
n+ = nº para un aumento de un nº de veces cada ciclo
n- = nº para una disminución de un nº de veces cada ciclo

De nuevo conviene notar cómo al estar en un bucle infinito la secuencia continúa repitiéndose indefinidamente.

Variaciones:

  • Cambia los límites de la iteración y haz así una secuencia en la que intervengan menos LEDs. Ejemplo:

    for(n=1;n<3;n++)

    o:

    int minled=1;
    int maxled=3;
    for(n=minled;n<maxled;n++);

  • Cambia la forma de variar n:

    Haz una secuencia inversa: for(n=3;n>-1;n--);
    Haz una que aumente de 2 en 2: for(n=0;n<4;n+=2);
    Haz una que disminuya de 2 en 2: for(n=3;n>-1;n-=2);

VIDEO DEL EJERCICIO 6

VIDEO DEL EJERCICIO 6 (versión para el montaje del SIMON)

CODIGO FUENTE

 Copyright (C) 2006  Juan Carlos Alonso de Mena
 This program is free software; you can redistribute it and/or modify it under the terms
 of the GNU General Public License as published by the Free Software Foundation;
 See the GNU General Public License for more details?

 int cadenaLeds[]={6,7,8,9};
 int tiempo=200;
 int n=0;
 void setup (){
   for(n=0;n<4;n++){
     pinMode(cadenaLeds[n],OUTPUT);
   }
 }
 void secuencia(){
   for(n=0;n<4;n++){
    digitalWrite(cadenaLeds[n],HIGH);//Envía 5V a la salida digital cuyo nº se encuentre
    delay(tiempo);                   // en la posición de la lista definida por el valor de n (enciende el LED)
    digitalWrite(cadenaLeds[n],LOW); //Envía 0V a la salida digital cuyo nº se encuentre
   }                                 // en la posición de la lista definida por el valor de n (apaga el LED)
 }
 void loop(){
   secuencia();
 }

Volver?

  Copyright (c) 2006  Juan Carlos Alonso de Mena

  Permission is granted to copy, distribute and/or modify this document under the terms of 
 the GNU Free Documentation License, Version 1.2 or any later version published by the
 Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
 Back-Cover Texts.  A copy of the license is included in the section entitled 
 GNU Free Documentation License?.