domingo, 22 de marzo de 2015

Encender rápidamente una serie de LEDs con un potenciómetro

Al girar el potenciómetro encendemos una serie de LEDs de forma acumulada. En esta ocasión podemos mover rápidamente la rueda del potenciómetro.

Un potenciómetro o resistencia variable nos permite disponer de valores analógicos entre 0 y 1023, en total son 1024 valores que podemos asociar a una entrada analógica como A0 y luego con condicionales establecer en el código las acciones que necesitamos. En este caso encenderemos una serie de LEDs de forma secuencial.

Ahora podemos mover rápidamente el potenciómetro y conseguiremos que se enciendan siempre no solo el LED que toque sino todos los anteriores. Esto se logra dando la instrucción en el código de que se enciendan todos los previos. Y el proceso análogo al apagarlos.

El proyecto se puede ver en el siguiente enlace:



int i;
int j;
int pinPotenciometro = A0;
int valorPotenciometro = 0;

void setup()
 {
  pinMode(pinPotenciometro, INPUT);
  for (i = 0; i < 14; i++)
  pinMode(i, OUTPUT);
  Serial.begin(9600);
 }

void loop()
 {
  valorPotenciometro = analogRead(pinPotenciometro);
  for (i = 0; i < 14; i++)
   {
    if (valorPotenciometro == 0) apagarLeds();
    if (valorPotenciometro > i*73 && valorPotenciometro <= (i+1)*73) encenderHasta(); //en este rango está el LED que toca encender
    if (valorPotenciometro == 1023) encenderLeds();
   }
 }

void encenderHasta()
 {
  for (j = 0; j < 14; j++) 
   if (j<=i) digitalWrite(j, HIGH); //se enciende el LED que toca (el i-esimo) y todos los anteriores
   else digitalWrite(j, LOW);       //el resto se apagan
 }

void apagarLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, LOW);
 }

void encenderLeds()
 {
  for (i = 0; i < 14; i++)
   digitalWrite(i, HIGH);
 }

No hay comentarios:

Publicar un comentario