Curso de Arduino y Robótica para automatizar tus inventos
Este es un gran reto de programación con Arduino.
Analiza el programa adjunto y configura una placa con cuatro leds. Ubícalos físicamente en un círculo.
Posteriormente, al lado de cada led, pon un pulsador y conectalo con la placa.
Conecta los ocho componentes correctamente, de manera que a cada led le corresponda un pulsador en el mismo orden (1,2,3,4)
//////////////////////////////////////////////////////
////// DECLARACIONES Y DEFINICIONES GENÉRICAS ////////
//////////////////////////////////////////////////////
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
int tonos[] = {NOTE_A3, NOTE_AS3, NOTE_B3, NOTE_C4 };
// Constantes de pines
#define PIN_DEL_P1 6 // Entrada digital del p1
#define PIN_DEL_P2 7 // Entrada digital del p2
#define PIN_DEL_P3 8 // Entrada digital del p3
#define PIN_DEL_P4 10 // Entrada digital del p4
int pulsadores[] = {PIN_DEL_P1, PIN_DEL_P2, PIN_DEL_P3, PIN_DEL_P4};
#define PIN_DEL_PIEZO 9 // Salida PWM del piezo
#define PIN_DEL_L1 2 // Salida digital del l1
#define PIN_DEL_L2 3 // Salida digital del l2
#define PIN_DEL_L3 4 // Salida digital del l3
#define PIN_DEL_L4 5 // Salida digital del l4
int leds[] = {PIN_DEL_L1, PIN_DEL_L2, PIN_DEL_L3, PIN_DEL_L4};
// Declaración de variables y objetos globales
int valor_dig_del_p1 = 0 ; //[num 0-1]
int valor_dig_del_p2 = 0 ; //[num 0-1]
int valor_dig_del_p3 = 0 ; //[num 0-1]
int valor_dig_del_p4 = 0 ; //[num 0-1]
#define MAX_RECORDAR 15
char secuencia_secreta[MAX_RECORDAR];
void carga_secuencia_secreta() {
for (int i = 0; i < MAX_RECORDAR; i++) {
secuencia_secreta[i] = random(0, 3);
}
}
void muestra_uno(int num_led, int duracion) {
digitalWrite(leds[num_led], HIGH);
analogWrite(PIN_DEL_PIEZO, tonos[num_led]);
delay(duracion / 2);
digitalWrite(leds[num_led], LOW);
delay(duracion / 2);
}
void muestra_todos_hasta(int posicion) {
for (int i = 0; i < posicion; i++) {
muestra_uno(posicion, 500);
delay(600);
}
}
int espera_y_comprueba_uno(int num_led) {
do { // Lectura de los sensores.
valor_dig_del_p1 = digitalRead( PIN_DEL_P1 ); // valor_dig_del_p1 es un 0 o un 1
valor_dig_del_p2 = digitalRead( PIN_DEL_P2 ); // valor_dig_del_p2 es un 0 o un 1
valor_dig_del_p3 = digitalRead( PIN_DEL_P3 ); // valor_dig_del_p3 es un 0 o un 1
valor_dig_del_p4 = digitalRead( PIN_DEL_P4 ); // valor_dig_del_p4 es un 0 o un 1
} while (valor_dig_del_p1 && valor_dig_del_p2 && valor_dig_del_p3 && valor_dig_del_p4 == LOW);
if (valor_dig_del_p1 == HIGH && num_led == 0) {
return (1);
}
if (valor_dig_del_p2 == HIGH && num_led == 1) {
return (1);
}
if (valor_dig_del_p3 == HIGH && num_led == 2) {
return (1);
}
if (valor_dig_del_p4 == HIGH && num_led == 3) {
return (1);
}
return (0);
}
int comprueba_todos_hasta(int posicion) {
for (int i = 0; i < posicion; i++) {
if (espera_y_comprueba_uno(secuencia_secreta[posicion]) == 0) {
return (0);
}
return (1);
}
}
void fallo() {
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
delay(10000);
}
void acierto() {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delay(10000);
}
//////////////////////////////////////////////////////
////////// DEFINICIÓN DE LA INICIALIZACIÓN //////////
//////////////////////////////////////////////////////
void setup( ) {
// pinMode de los pines digitales de salida.
randomSeed(analogRead(A0));
pinMode( PIN_DEL_L1 , OUTPUT );
pinMode( PIN_DEL_L2 , OUTPUT );
pinMode( PIN_DEL_L3 , OUTPUT );
pinMode( PIN_DEL_L4 , OUTPUT );
carga_secuencia_secreta();
muestra_todos_hasta(4);
} // fin de la definición de la función de INICIALIZACIÓN setup( )
//////////////////////////////////////////////////////
////////////// DEFINICIÓN DEL PROGRAMA ///////////////
//////////////////////////////////////////////////////
void loop( ) {
} // fin de definición de la función de PROGRAMA loop( )
Copyright © 2015 - Todos los derechos reservados - Arduino Inventor
Plantilla : OS Templates