/****************************************************************
Manuel Córdoba Ramos 06/11/24
Tema 6. Problema 2: Pérdida de requisitos de tiempo
Cada vez que se pulse el botón, debe cambiar el estado del LED
Debe realizarse con interrupciones
La idea de este código es hacer ver que sin usar un timer, el
núcleo encargado de realizar la lectura analógica no lo hace
mientras está en el delay.
****************************************************************/
#define POT_IN 4
#define LED_PIN 33
#define BUTTON_IN 27
// Variables
double t;
double freq;
bool conmutar;
// Manejadores de interrupciones
void IRAM_ATTR ISR_Boton(void){
conmutar = true;
}
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,FALLING);
// Inicialización de variables
t = 0.0;
freq = 0.0;
conmutar = false;
}
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);
if (conmutar){
conmutar = false;
for(int i=0; i<5; i++){
digitalWrite(LED_PIN,!digitalRead(LED_PIN));
delay(250);
digitalWrite(LED_PIN,!digitalRead(LED_PIN));
delay(250);
}
}
delay(50);
}