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
- Instalación del IDE.
- Carga de programas en la placa Arduino.
- Ejercicio anterior (multiples leds)
- Ejercicio anterior (el pulsador).
Material requerido
|
|
|
|
|
|
|
|
|
|
|
|
|
El circuito.
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);
}
}