/*
Scrivere un programma che realizzi una teiera automatica tale che:
- si accenda premendo il pulsante A, alla cui pressione si mette a blinkare il led S di stato dell'acqua che così indica che la temperatura ancora non è quella giusta.
- Una pressione del pulsante A mentre il led S blinka non ha alcun effetto.
- l'acqua è a temperatura quando, dopo 10 secondi, il led S non blinka più ma è a luminosità fissa
- premere il pulsante A con il led S è fisso mette in azione la erogazione del te da un ugello, segnalata da un led E acceso
- l'erogazione termina dopo 3 secondi, passati i quali il led E si spegne.
- una pressione prolungata del pulsante A (più di 3 secondi) spegne la teiera disattivando tutti i led.
*/
#include "urutils.h"
int led_E=13;
int led_A=12;
int pulsante1=14;
int state;
DiffTimer t1, t2;
enum Stati{
SPENTO,
RISCALDAMENTO,
BOLLITURA,
EROGAZIONE
};
void blink(int led) {
digitalWrite(led, !digitalRead(led));
}
void setup(){
pinMode(pulsante1, INPUT);
pinMode(led_E, OUTPUT);
pinMode(led_A, OUTPUT);
Serial.begin(115200);
state = SPENTO; // inizialmente l'acqua è fredda
t2.stop();
}
void loop(){
if(state == SPENTO){
Serial.println("SPENTO");
if(digitalRead(pulsante1)==HIGH){
waitUntilInputLow(pulsante1, 50); //fronte di discesa
state = RISCALDAMENTO;
Serial.println("RISCALDAMENTO");
t1.start();
t1.reset();
t2.start();
t2.reset();
}
}else if(state == RISCALDAMENTO){
// eseguo il blink del led A
if(t1.get() < 10000){
if (t2.get() > 1000) { // polling timer blink
t2.reset(); // riarmo timer blink
Serial.println("blink");
blink(led_A);
}
}else{
t1.stop();
t2.stop();
digitalWrite(led_A, HIGH);
state = BOLLITURA;
Serial.println("BOLLITURA");
}
}else if(state == BOLLITURA){
if(digitalRead(pulsante1)==HIGH){
t1.start();
t1.reset();
waitUntilInputLow(pulsante1, 50); //fronte di discesa
if(t1.get() > 3000){
// spegnimento
digitalWrite(led_E, LOW);
digitalWrite(led_A, LOW);
state = SPENTO;
Serial.println("SPENTO");
}else{
t1.stop();
state = EROGAZIONE;
Serial.println("EROGAZIONE");
t2.start();
t2.reset();
}
}
}else if(state == EROGAZIONE){
if(t2.get() < 3000){
digitalWrite(led_E, HIGH);
}else{
t2.stop();
digitalWrite(led_E, LOW);
state = BOLLITURA;
Serial.println("BOLLITURA");
}
}
delay(10);
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
led1:A
led1:C
led2:A
led2:C
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2