#define BOTON_AZUL_PIN 35
#define BOTON_VERDE_PIN 33
#define BOTON_ROJO_PIN 27
#define BOTON_NEGRO_PIN 14
#define LED_AZUL_PIN 16
#define LED_VERDE_PIN 4
#define LED_ROJO_PIN 2
hw_timer_t *timer1 = NULL;
hw_timer_t *timer2 = NULL;
volatile int contador=0;
volatile int estado=0;
volatile bool azul_pulsado=false;
volatile bool verde_pulsado=false;
volatile bool rojo_pulsado=false;
volatile bool negro_pulsado=false;
volatile int LED=0;
volatile int pulsado=0;
volatile bool activado=false;
void IRAM_ATTR ISR1()
{
azul_pulsado=true;
Serial.println("Azul pulsado");
}
void IRAM_ATTR ISR2()
{
verde_pulsado=true;
Serial.println("Verde pulsado");
}
void IRAM_ATTR ISR3()
{
rojo_pulsado=true;
Serial.println("Rojo pulsado");
}
void IRAM_ATTR ISR4()
{
negro_pulsado=true;
Serial.println("Negro pulsado");
}
void IRAM_ATTR ISRTIMER1()
{
if ((pulsado==true) && (contador<=6))
{
digitalWrite(LED, !digitalRead(LED));
contador++;
}
if ((contador>=7) && (!negro_pulsado) )
{
digitalWrite(LED, HIGH);
pulsado=false;
contador=0;
azul_pulsado=false;
verde_pulsado=false;
rojo_pulsado=false;
}
}
/*
void IRAM_ATTR ISRTIMER2()
{
}
*/
void setup() {
Serial.begin(115200);
pinMode(BOTON_AZUL_PIN, INPUT_PULLUP);
pinMode(BOTON_VERDE_PIN, INPUT_PULLUP);
pinMode(BOTON_ROJO_PIN, INPUT_PULLUP);
pinMode(BOTON_NEGRO_PIN, INPUT_PULLUP);
pinMode (LED_AZUL_PIN, OUTPUT);
pinMode (LED_VERDE_PIN, OUTPUT);
pinMode (LED_ROJO_PIN, OUTPUT);
attachInterrupt(BOTON_AZUL_PIN, ISR1, RISING);
attachInterrupt(BOTON_VERDE_PIN, ISR2, RISING);
attachInterrupt(BOTON_ROJO_PIN, ISR3, RISING);
attachInterrupt(BOTON_NEGRO_PIN, ISR4, RISING);
timer1 = timerBegin(1000000);
timerAttachInterrupt(timer1, ISRTIMER1);
timerAlarm(timer1,500000,true,0);
/*
timer2 = timerBegin(1000000);
timerAttachInterrupt(timer2, ISRTIMER2);
timerAlarm(timer2,500000,true,0);
*/
}
void loop() {
switch(estado){
case 0:
if (negro_pulsado)
{
rojo_pulsado=false;
verde_pulsado=false;
azul_pulsado=false;
negro_pulsado=false;
pulsado=false;
digitalWrite(LED_AZUL_PIN, LOW);
digitalWrite(LED_VERDE_PIN, LOW);
digitalWrite(LED_ROJO_PIN, LOW);
}
if(azul_pulsado)
{
pulsado=azul_pulsado;
LED=LED_AZUL_PIN;
estado=1;
}
if(rojo_pulsado || verde_pulsado)
{
Serial.println("Te equivocaste.");
rojo_pulsado=false;
verde_pulsado=false;
}
break;
case 1:
if(verde_pulsado)
{
pulsado=verde_pulsado;
LED=LED_VERDE_PIN;
estado=2;
}
if(rojo_pulsado || azul_pulsado)
{
Serial.println("Te equivocaste.");
rojo_pulsado=false;
azul_pulsado=false;
}
if(negro_pulsado)
{
estado=0;
}
break;
case 2:
if(rojo_pulsado)
{
pulsado=rojo_pulsado;
LED=LED_ROJO_PIN;
estado=3;
}
if(verde_pulsado || azul_pulsado)
{
Serial.println("Te equivocaste.");
verde_pulsado=false;
azul_pulsado=false;
}
if(negro_pulsado)
{
estado=0;
}
break;
case 3:
if(negro_pulsado)
{
estado=0;
}
break;
}
delay(10);
}