#define TERMOMETRO 2
#define SET 15
#define ON 25
#define OFF 13
#define LED 27
#define TIEMPO_ENCENDIDO 400
#define TIEMPO_APAGADO 400
// Tiempos----
unsigned long tiempo_ref=0;
// Estados del horno----
enum ESTADOS{
apagado,
encendido
};
ESTADOS estado;
// Interrupciones----
volatile bool pulsador_on=false;
volatile bool pulsador_off=false;
void IRAM_ATTR on(){
pulsador_on=true;
}
void IRAM_ATTR off(){
pulsador_off=true;
}
// Funciones----
void prender_led(){
digitalWrite(LED, HIGH);
}
void apagar_led(){
digitalWrite(LED, LOW);
}
// Variables
int temperatura, temperatura_set;
bool accionHorno=false;
void setup() {
pinMode(TERMOMETRO, INPUT);
pinMode(SET, INPUT);
pinMode(ON, INPUT_PULLUP);
pinMode(OFF, INPUT_PULLUP);
pinMode(LED, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ON), on, FALLING);
attachInterrupt(digitalPinToInterrupt(OFF), off, FALLING);
Serial.begin(115200);
analogReadResolution(8);
estado=apagado;
apagar_led();
}
void loop() {
delay(10);
temperatura_set=analogRead(SET);
temperatura=analogRead(TERMOMETRO);
if(pulsador_on==true && pulsador_off==false){
estado=encendido;
if(temperatura<=temperatura_set-3){
accionHorno=true;
}
if(temperatura>=temperatura_set+3){
apagar_led();
accionHorno=false;
}
if(accionHorno==true){
switch(estado){
case apagado:
if(millis()-tiempo_ref>=TIEMPO_ENCENDIDO){
prender_led();
tiempo_ref=millis();
estado=encendido;
}
break;
case encendido:
if(millis()-tiempo_ref>=TIEMPO_APAGADO){
apagar_led();
tiempo_ref=millis();
estado=apagado;
}
break;
}
}
}else if(pulsador_off==true){
apagar_led();
pulsador_off=false;
pulsador_on=false;
}
Serial.print("set: ");
Serial.print(analogRead(SET));
Serial.print(" termo: ");
Serial.println(analogRead(TERMOMETRO));
}