/****************************************************************
Manuel Córdoba Ramos 06/11/24
Tema 6. Problema 2: Uso de timers
Al pulsar el LED debe parpadear 5 veces con un periodo de medio segundo
Mi timer debe contar 0,25 segundos
En este ejemplo se usa Ticker
****************************************************************/
#include <Ticker.h>
// Definición de pines I/O
#define POT_IN 4
#define LED_PIN 33
#define BUTTON_IN 27
// Timers
Ticker blinker;
// Variables
double t;
double freq;
volatile int cuenta;
// Funciones
void conmutarLed(void){
digitalWrite(LED_PIN,!digitalRead(LED_PIN));
cuenta++;
if (cuenta == 11){
blinker.detach();
cuenta = 1;
}
}
// Manejadores de interrupciones
void IRAM_ATTR ISR_Boton(void){
blinker.attach(0.25,conmutarLed);
}
void setup() {
Serial.begin(9600);
Serial.println("Reading the potenciometer!");
// I/O configuration
pinMode(POT_IN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_IN, INPUT_PULLUP);
// Interrupciones
attachInterrupt(digitalPinToInterrupt(BUTTON_IN),&ISR_Boton,RISING);
// Inicialización de variables
t = 0.0;
freq = 0.0;
cuenta = 1;
}
void loop() {
Serial.println("Lectura analogica:");
Serial.println(analogRead(POT_IN));
freq = 1/double((millis()-t)/1000);
t = millis();
Serial.println("Frecuencia:");
Serial.println(freq);
delay(50);
}