int tempf = 0;
int tempc = 0;
int buttonstatea = 0; //Variabile per leggere stato pulsante accensione
int buttonstatev = 0; //Variabile per lettura stato pulsante vapore
int buttonstatep = 0;
int turboblink = 0; //Variabile per lampeggio turbo
//Ciclo primo avvio Pompa
unsigned long contatore;
unsigned long contaimpulsi;
int controlpump = 0;
int pumpCont = 0;
int pumpState = 0;
int timepump = 0;
int memtemp = 0;
int memtemp1 = 0;
int pump1 = LOW;
int pumpa = 0;
int pumpb = 0;
int pumpon = 0;
int pumponmem;
int cleantime = 0;
int cleandelay = 0;
int memon = 0;
int memton = 1;
int memavvio = 0;
int valbuttonold = LOW;
int valbuttontold = LOW;
int pulizia = 0;
//
int H2OCont = 0;
int H2Omillis = 0;
int h2o = 0;
int buttonstateh2o = 0;
int buttonstatet = 0;
int memh2o = 0;
int memclean = 0;
//PROGRAMMI
int A;
int B;
int C;
int Df;
int tfeco = 350; //350 stirato zia andava bene
int tfturbo = 150; //200 fin troppo blando
int tminECO = 22; // sembra perfetto
int tmaxECO = 42; // 46 troppo alto.
int tECO = 30; //sembra perfetto. abbassato a 30 perchè 35 faceva 1 po di acqua.
//turbo provato con mamma, sembrava andare ok
int tminTURBO = 16; // 23 sembra ok.
int tmaxTURBO = 35; // 40 fin troppo alto. 38 sembra ok
int tTURBO = 20; // 27 sembra ok
//
#define turbo A4 //ok
#define h2o A5
#define swa A3//ok
#define swv A2//ok
#define ledon 7// ok
#define ledf 5//ok
#define ledc 6//ok
#define ledoff 11//non messo
#define rf 3//ok
#define rc 4//ok
#define ev 10//ok
#define pumpPin 2//ok
#define pulizia 9//ok
// A1 temp ferro
//millis1 Caldaia
unsigned long previousMillis1 = 0; // memorizza l'ultimo stato
unsigned long interval1 = 1000; //intervallo di lettura NTC ferro
//millis2 Ferro
unsigned long previousMillis2 = 0;
unsigned long interval2 = 1000; //intervallo di lettura NTC caldaia
//millis3 H2O
unsigned long previousMillis3 = 0;
unsigned long interval3 = 1000;
//millis4 POMPA Secondi di funzionamento pompa
unsigned long previousMillis4 = 0;
unsigned long interval4 = 4000;
//millis5 LED TURBO
unsigned long previousMillis5 = 0;
unsigned long interval5 = 1000;
//millis6 Tempo Ripartenza Pompa dopo carico
unsigned long previousMillis6 = 0;
unsigned long interval6 = 1000;
//millis7 Lampeggio led turbo
unsigned long previousMillis7 = 0;
unsigned long interval7 = 1000;
//millis8 Tempo primo avvio pompa
unsigned long previousMillis8 = 0;
unsigned long interval8 = 1000;
//millis9 NON USATO
unsigned long previousMillis9 = 0;
unsigned long interval9 = 1000;
//millis10 GESTIONE AVVIO POMPA DOPO SVUOTAMENTO ACQUA CALDAIA
unsigned long previousMillis10 = 0;
unsigned long interval10 = 1000;
//millis11 GESTIONE AVVIO POMPA DOPO SVUOTAMENTO ACQUA CALDAIA
unsigned long previousMillis11 = 0;
unsigned long interval11 = 1000;
//millis12 GESTIONE AVVIO POMPA DOPO SVUOTAMENTO ACQUA CALDAIA
unsigned long previousMillis12 = 0;
unsigned long interval12 = 1000;
//millis13 GESTIONE AVVIO POMPA DOPO SVUOTAMENTO ACQUA CALDAIA
unsigned long previousMillis13 = 0;
unsigned long interval13 = 1000;
//millis14 Abilitazione pompa
unsigned long previousMillis14 = 0;
unsigned long interval14 = 1000;
//millis15 DEBUG
unsigned long previousMillis15 = 0;
unsigned long interval15 = 1000;
;
void setup()
{
Serial.begin(9600);
pinMode(rc, OUTPUT);
pinMode(rf, OUTPUT);
pinMode(ledon, OUTPUT);
pinMode(ledf, OUTPUT);
pinMode(ledc, OUTPUT);
pinMode(swa, INPUT_PULLUP);
pinMode(swv, INPUT_PULLUP);
pinMode(ledoff, OUTPUT);
pinMode(ev, OUTPUT);
pinMode(pumpPin, OUTPUT);
pinMode(turbo, INPUT_PULLUP);
pinMode(h2o, INPUT_PULLUP);
pinMode(pulizia, INPUT_PULLUP);
}
void loop()
{
tempc = analogRead (A0);
//LETTURA TASTO ACCENSIONE
buttonstatea = digitalRead(swa);
if (buttonstatea == HIGH && valbuttonold == LOW) {
memon ^= 1; // Inverte lo stato (da ON a OFF, da OFF a ON)
}
memavvio = memavvio + 1;
valbuttonold = buttonstatea;
//GESTIONE PULSANTE TURBO
buttonstatet = digitalRead (turbo);
if (buttonstatet == HIGH && valbuttontold == LOW) {
memton ^= 1; // Inverte lo stato (da ON a OFF, da OFF a ON)
}
valbuttontold = buttonstatet;
// ACCENSIONE IMPIANTO
if (memon == 0) {
digitalWrite(ledoff, LOW);
if (memton == 0) {
goto turbojump;
} else
digitalWrite(ledon, HIGH);
turbojump:
//GESTIONE LED TURBO
if (memton == 0) {
if (millis() - previousMillis7 > interval7) {
// save the last time you blinked the LED
previousMillis7 = millis();
// if the LED is off turn it on and vice-versa:
if (turboblink == LOW) {
turboblink = HIGH;
} else {
turboblink = LOW;
}
digitalWrite(ledon, turboblink);
}
}
//GESTIONE PROGRAMMI
if (memton == 0) {
A = tminTURBO;
B = tmaxTURBO;
C = tTURBO; // x gestione resistenza caldaia
Df = tfturbo;
} else {
A = tminECO;
B = tmaxECO;
C = tECO; // x gestione resistenza caldaia
Df = tfeco;
}
// *************************************************************** GESTIONE AVVIO POMPA DOPO SVUOTAMENTO ACQUA CALDAIA
buttonstatep = digitalRead(pulizia);
// qui avevo tolto un delay di 100
if (buttonstatep == 0) {
memclean ++;
}
//Parametri 96 è poco. (12 volte a 2 secondi). 134 in test ( 9 sec di ciclo x 15 volte 135sec. il valore da mettere è 1 in meno)
if ((memclean > 1) and (cleantime < 134) and (tempc < 100)) {
if (millis() - previousMillis12 > interval12) {
previousMillis12 = millis();
cleantime ++;
Serial.println("Carico acqua dopo svuotamento caldaia");
}
if ((memclean > 1) and (pumpa < 3
) ) {
if (millis() - previousMillis10 > interval10) {
previousMillis10 = millis();
pumpa ++;
pumpon = 1;
}
}
if (pumpa == 3 and pumpb < 6) {
if (millis() - previousMillis11 > interval11) {
previousMillis11 = millis();
pumpb ++;
pumpon = 0;
if (pumpb == 6) {
pumpa = 0;
pumpb = 0;
}
}
}
digitalWrite (pumpPin, pumpon);
}
if (cleantime == 134 and cleandelay < 30) {
if (millis() - previousMillis13 > interval13) {
previousMillis13 = millis();
cleandelay ++;
memtemp = 0;
Serial.println("Attendo 30 secondi prima di caricare altra acqua se serve");
}
}
//************************************************************************
//GESTIONE CARICO ACQUA MANUALE
buttonstateh2o = digitalRead(h2o);
if (buttonstateh2o == 0) {
memh2o ++;
}
//Serial.print("memclean: ");
// Serial.println(memh2o, DEC);
//GESTIONE FERRO
if (millis() - previousMillis2 > interval2) {
previousMillis2 = millis();
tempf = analogRead (A1);
Serial.print("NTC FERRO: ");
Serial.print(tempf, DEC);
}
if (tempf > Df) {
digitalWrite(rf, HIGH);
digitalWrite(ledf, LOW);
} else {
digitalWrite(rf, LOW);
digitalWrite(ledf, HIGH);
}
buttonstatev = digitalRead(A2);
if ((tempc < 60) and (buttonstatev == 0)) {
digitalWrite(ev, HIGH);
}
else
if (buttonstatev == 1){
digitalWrite(ev, LOW);
}
//Ciclo POMPA
//..................................................................TEMPORIZZATORE PRIMO AVVIO
if ((contaimpulsi < 76) && (memon == 0)) { //dopo 76 sec, ntc caldaia è a regime eco NTC30!
if (millis() - previousMillis8 > interval8) {
previousMillis8 = millis();
contaimpulsi++;
Serial.print("..............................TempoPompaPrimoAvvio: ");
Serial.println(contaimpulsi, DEC);
}
}
if (contaimpulsi == 76) {
controlpump = 1; // parametro da utilizzare per abilitare ciclo pompa
}
//.......................................................................TEMPORIZZAZZIONE DAL SECONDO AVVIO, CALDAIA CALDA
//in cantiere
// //GESTIONE CALDAIA....................................................ABILITAZIONE POMPA DA TEMPERATURA
// Memorizzo la richiesta di acqua e faccio finire il carico stabilito
//if(buttonstatev==1){
if (millis() - previousMillis1 > interval1) {
previousMillis1 = millis();
tempc = analogRead (A0);
Serial.print(" NTC: ");
Serial.println(tempc, DEC);
if (tempc > C) {
digitalWrite(ledc, LOW);
digitalWrite(rc, HIGH);
} else {
digitalWrite(rc, LOW);
digitalWrite(ledc, HIGH);
}
if ((tempc < A || tempc > B) && (contaimpulsi == 76)) {
memtemp = 1;
if (millis() - previousMillis14 > interval14) {
previousMillis14 = millis();
Serial.println("Serve H2O");
}
}
if (tempc < 70) {
memtemp1 = 1;
}}
// CONTROLPUMP FUNZIONA,
if ( ((memclean == 0 || cleandelay == 30) && (( pumpCont < 3 && controlpump == 1) && (memh2o > 0 || memtemp == 1) )) && memtemp1 == 1 ) {
if (millis() - previousMillis4 > interval4) {
previousMillis4 = millis();
pumpState ^= 1;
if (pumpState == 1) {
digitalWrite(pumpPin, HIGH);
Serial.print("*********Conteggio*********");
Serial.println(pumpCont, DEC);
}
else {
digitalWrite(pumpPin, LOW);
//Serial.print("Conteggio ");
//Serial.println(pumpCont, DEC);
pumpCont ++;
}
}
}
// RESET ABILITAZIONE POMPA PER NUOVO RICARICO
if (pumpCont == 3 && timepump < 15) {
if (millis() - previousMillis6 > interval6) {
previousMillis6 = millis();
timepump ++;
Serial.print("******************************Ricarico Pompa dopo: ");
Serial.println(timepump, DEC);
}
}
if (timepump == 15) {
pumpCont = 0;
timepump = 0;
memtemp = 0;
memh2o = 0;
memtemp1 = 0;
}
} else {
if (tempc > 200) {
contaimpulsi = 0;
}
//GESTIONE EV VAPORE, messo fuori dall'if iniziale per
// fare andare il tasto vapore con sistema spento.
buttonstatev = digitalRead(A2);
if (buttonstatev==1) {
digitalWrite(ev, LOW);
}
else{
digitalWrite(ev,HIGH);
}
digitalWrite(ledoff, HIGH);
digitalWrite(ledon, LOW);
digitalWrite(ledf, LOW);
digitalWrite(ledc, LOW);
digitalWrite(rf, LOW);
digitalWrite(rc, LOW);
digitalWrite(pumpPin, LOW);
memtemp = 0;
}
}