//definimos el tamaño del arreglo
#define in_x 8
#define out_x 8
#define LED_SecPan 3
byte A_LED_A = 0;
byte A_LED_B = 0;
byte A_LED_C = 0;
byte arr_SecPan[LED_SecPan] = { A_LED_A, A_LED_B, A_LED_C};
//definimos el orden de los LEDs y Sensores
byte arr_In[in_x] = {10,11,12,13,14,15,16,17};
byte arr_Out[out_x] = {9,8,7,6,5,4,3,2};
bool transicion = false;
bool test = true;
bool game = false;
byte ronda = 2;
byte blinkA = 5;
int time_test = 100;
void setup () {
// setup the serial for debugging
Serial.begin(9600) ;
//definir dentro del array los pines de entrada para los sensores
for (int i = 0; i < in_x; i++) { pinMode(arr_In[i], INPUT);}
//definir dentro del arraylos pines de salida para los Leds
for (int i = 0; i < out_x; i++) { pinMode(arr_Out[i], OUTPUT);}
pinMode(1, INPUT_PULLUP);
}
void loop () {
int button = digitalRead(1) ; //setup the button's value to be used
Serial.print("Button ");
Serial.println(button);
if (test) { delay(time_test);}
//presionamos el boton para Iniciar el juego
if (button == 0) {
//iniciamos la secuencia Random
encender_leds_Panel_1(true);
//inicio();
game = true;
transicion = false;
ronda = 2;
delay(50);
} else {
// si no se ha iniciado el juego, mostramos una animacion en los leds
if (!game) {
Luces_random();
}
}
//verificar si existen led encendidos
bool led_on_x = false;
for (int i = 0; i < out_x; i++){
if (digitalRead(arr_Out[i])==1) {
delay(250);
//si existen leds encendidos, activamos una variable
led_on_x = true;
Serial.print("led_on_x ");
Serial.println(true);
} else {
//Serial.print("led OFF ");
// Serial.println(arr_Out[i]);
}
}
//si existen leds encendidos, esperar la respuesta de los sensores para apagar los led
if (test) {delay(time_test);}
if (game && led_on_x) {
for (int i = 0; i < in_x; i++) {
if (digitalRead(arr_In[i])==0) {
Serial.print("Sensor Activado ");
Serial.println(arr_In[i]);
digitalWrite(arr_Out[i], LOW);
Serial.print("Apagar Pin ");
Serial.println(arr_Out[i]);
delay(25);
} else {
//Serial.print("Sensor Apagado ");
// Serial.println(arr_In[i]);
}
}
// debug
if (test) { delay(time_test);}
}
//si se completo trayecto de IDA (Blink A)
if (test) {
Serial.print("transicion ");
Serial.println(transicion);
Serial.print("game ");
Serial.println(game);
Serial.print("led_on_x ");
Serial.println(led_on_x);
Serial.print("ronda ");
Serial.println(ronda);
}
if (game && !led_on_x && ronda >0) {
blink_Camino();
//si se completo trayecto de Ida (Blink A)
if (blinkA == 0 && !transicion) {
Camino_ON();
blinkA = 2;
transicion = true;
ronda--;
Camino_ON();
}
//si se completo trayecto de Regreso (Blink A)
if (blinkA == 0 && transicion) {
Camino_ON();
blinkA = 2;
transicion = false;
ronda--;
Camino_ON();
}
}
if (ronda ==0 ) {
Camino_OFF();
game = false;
}
}
//funciones
void encender_leds_Panel_1(bool powerOn)
{
Leds_OFF();
//leds aleatorios
A_LED_A = random(7, 9) ;
A_LED_B = random(4, 7) ;
A_LED_C = random(2, 4) ;
arr_SecPan[0] = A_LED_A;
arr_SecPan[1] = A_LED_B;
arr_SecPan[2] = A_LED_C;
// encender LED camino
for (int i = 0; i < 3; i++) {
if ( powerOn) {
digitalWrite(arr_SecPan[i], HIGH);
Serial.print("Encender led ");
Serial.println(arr_SecPan[i]);
}
}
}
/*
int randomTime = random(500, 3000) ;
Serial.println(randomTime);
delay(randomTime) ;
*/
void Leds_ON()
{
Serial.println("Leds ON ");
for (int i = 0; i < out_x; i++) {
digitalWrite(arr_Out[i], HIGH);
delay(5);
}
// debug
if (test) { delay(time_test);}
}
void Leds_OFF()
{
Serial.println("Leds OFF ");
for (int i = 0; i < out_x; i++) {
digitalWrite(arr_Out[i], LOW);
delay(5);
}
// debug
if (test) { delay(time_test);}
}
void Camino_ON()
{
Serial.println("Camino OK on");
for (int i = 0; i < LED_SecPan; i++) {
digitalWrite(arr_SecPan[i], HIGH);
delay(5);
}
// debug
if (test) { delay(time_test);}
}
void Camino_OFF()
{
Serial.println("Camino OK off ");
for (int i = 0; i < LED_SecPan; i++) {
digitalWrite(arr_SecPan[i], LOW);
delay(5);
}
// debug
if (test) { delay(time_test);}
}
void Luces_random()
{
if (!game) {
int ledran= random(2, 10);
digitalWrite(ledran, HIGH);
delay(20);
digitalWrite(ledran, LOW);
}
}
void blink_Camino()
{
if (blinkA > 0) {
Camino_ON();
// debug
if (test) { delay(time_test);}
Camino_OFF();
// debug
if (test) { delay(time_test);}
blinkA--;
}
}
void inicio()
{
Leds_ON();
Leds_OFF();
Camino_ON();
Camino_OFF();
Camino_ON();
Camino_OFF();
//transicion_x--;
}