#define LED_PIN 26
#define BUTTON_PIN 27
hw_timer_t * timerled = NULL;
volatile int cont;
volatile int t;
volatile int t1;
volatile int t2;
volatile bool larga;
volatile bool blink;
volatile bool OFF;
void IRAM_ATTR ISRTimer()
{
if(larga)
{
blink = true;
}
}
void IRAM_ATTR ISRledConm()
{
cont++;
if(cont == 1)
{
timerStart(timerled);
t1 = millis();
Serial.println(cont);
}
if(cont == 2)
{
timerStop(timerled);
t2 = millis();
Serial.println(cont);
}
if(cont == 4)
{
Serial.println(cont);
OFF = true;
timerStop(timerled);
cont = 0;
Serial.println(cont);
}
}
void setup() {
Serial.begin(115200);
t=0;
t1=0;
t2=0;
cont=0;
larga=false;
blink=false;
OFF=false;
timerled = timerBegin(1000000);
timerAttachInterrupt (timerled, &ISRTimer);
timerAlarm(timerled, 500000, true, 0);
timerStop(timerled);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), ISRledConm, CHANGE);
}
void loop() {
//double frecuencia = 1/((millis()-t)/1e3);
//Serial.print("Frecuencia: ");
//Serial.println(frecuencia);
if(cont == 2)
{
if((t2 - t1) < 1000)
{
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
if((t2 - t1) >= 1000)
{
timerStart(timerled);
larga = true;
}
}
if(blink)
{
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
blink = false;
}
if(OFF)
{
digitalWrite(LED_PIN, false);
larga = false;
timerStop(timerled);
OFF = false;
blink = false;
cont = 0;
}
t=millis();
delay(50); // this speeds up the simulation
}