#define LED_PIN 26
#define BUTTON_PIN 27
hw_timer_t * timerled = NULL;
double t;
bool on;
volatile bool corta = false;
volatile bool larga = false;
volatile bool timer_onP = false;
void IRAM_ATTR ISRTimer()
{
if(boton_off)
{
digitalWrite(LED_PIN, false);
boton_off = false;
}
if(larga)
{
timer
larga = false;
}
}
void IRAM_ATTR ISRledConm()
{
if(!timer_onP)
{
timerStart(timerled);
}
if(timer_on)
{
timerStop(timerled);
timerRestart(timerled);
timer_onP = true;
}
}
void setup() {
t=0.0;
timerled = timerBegin(1000000);
timerAttachInterrupt (timerled, &ISRTimer);
timerAlarm(timerled, 500000, true, 0);
timerStop(timerled);
Serial.begin(115200);
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(timer_onP)
{
if((timerReadMillis(timerled)) < 1000)
{
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
boton_off = true;
}
if((timerReadMillis(timerled)) >= 1000)
{
larga = true;
}
timer_onP = false;
}
if(larga)
{
timerStart(timerled);
}
t=millis();
delay(50); // this speeds up the simulation
}
if(timer_on)
{
if(cont <10){
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
if(cont == 10)
{
cont = 0;
timerStop(timerled);
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
timer_on = false;
}