Juego con multiples leds y un pulsador

En esta ocasión vamos a construir un circuito con un número impar de leds (5,7,9) y un pulsador.

  • Los leds se irán encendiendo de izquierda a derecha y vuelta a empezar.
  • El usuario debe pulsar el pulsador cuando este encendido el led del medio.
    • En caso de acierto encenderemos varias veces el led del medio
    • En caso de fallo encenderemos varias veces el primer led.

Posibles mejoras utilizar un buzzer para emitir una melodía.

Conocimiento previo

Material requerido

arduino
  • Arduino Uno o similar.
  • Un PC con el entorno de Arduino correctamente instalado y configurado.
Img_3_4
  •  Una Protoboard.
RedLed_
  • 9 diodos LED.
resistencia10K
  • Una resistencia de 4k7
Img_3_5
  • Una resistencia de 330 Ohmios.
Img_3_6-300x185
  • 9 diodos LED.
pulsador
  • Un pulsador

 

El circuito.

05_Mult_leds_pulsador

El programa.

Comenzaremos declarando y configurando los elementos que necesitaremos los 9 pines de salida (5-13) y pin de entrada (2) y el puerto serie a 9600.

int boton = 2;

void setup() {
  // conectamos el puerto serie
  Serial.begin(9600);
 
  // declaramos el botón para entrada
  pinMode(boton, INPUT);

  // y los pin del 5 al 13 como salida
  for (int i = 5; i < 14; i++) {
    pinMode(i, OUTPUT);     
  }

}

En el loop() declaramos una variable para leer el pin de entrada (pulsador) y utilizaremos un bucle for para encender y apagar los 9 leds (ejercicio de ejemplo).

Justa después de encender cada led realizaremos la lectura con la instrucción digitalRead(boton) y almacenaremos el resultado en una variable entera llamada valor.

Solo nos queda comprobar si el botón esta pulsado (valor==1) y el led es el correspondiente a la mitad de la tira, es decir (i==9). En caso de ciertas las dos condiciones escribimos en el puerto serie “Has acertado”.

Pero si el usuario mantiene pulsado el botón siempre acierta, y por lo menos escribiremos un mensaje si pulsa el botón (valor==1) y el led no es el que corresponde (i!=9).

Para finalizar hemos añadido el parpadeo, 8 veces, de un led en caso de acierto, el led 9 y el de otro si se falla, el led 5.

void loop() {
int valor;

  for (int i = 5; i < 14; i++) {
    digitalWrite(i, HIGH);
    valor=digitalRead(boton);
    if ((valor==0) && (i==9)){
      Serial.println(“¡HAS ACERTADO!”);
      for(int j=0; j<=8; j++){
         digitalWrite(9, HIGH);
         delay(200);
         digitalWrite(9, LOW);
         delay(200);
      }
      }
    if ((valor==0) && (i!=9)){
      Serial.println(“¡HAS FALLADO!”);
      for(int p=0; p<=8; p++){
         digitalWrite(5, HIGH);
         delay(200);
         digitalWrite(5, LOW);
         delay(200);
      }
    }
    delay(100);
    digitalWrite(i, LOW);
    delay(0);
    
    }

  }