dallo switch sulla valvola dell'acqua calda/vapore del beccuccio. Ho iniziato col solito if ma poi mi sono reso conto che in questa maniera o non si ferma la pompa quando chiudi la valvola del vapore 3e lo switch va su off oppure se aggiungo un altro if o un else non si
bloccata dal if sullo switch. Che tipo di logica bisogna usare in questi casi? Con i classici if non ci riesco :-(
Fatto, errore da principiante, quando le cose funzionano non si guarda altro :-)
#include
String caffeoff = "9997102102101111102102"; //stringa pulsante caffe che arriva dal Nextion String caffeon = "9997102102101111110"; String vapoff = "11897112111102102"; //stringa pulsante vapore che arriva dal Nextion String vapon = "11897112111110"; String setpiu = "115101116109101110111"; //stringa pulsante +Set Temp che arriva dal Nextion String setmeno = "115101116112105117";//stringa pulsante -Set Temp che arriva dal Nextion String page0 = "1129710310148"; //stringa numero pagina String page1 = "1129710310149";
sempre la pagina 0 ad essere visualizzata int page1on = 0; //variabile di cambio pagina
String a = ""; //variabile dove si memorizza la lettura della seriale dal Nextion String com; //variabile dove viene memorizzata la stringa completa che arriva dal Nextion
int intemperatura = A0; // ingresso sensore temperatura int temperatura = 0; //variabile temperatura dopo mappatura int settemp = 0; //temperatura di set int settempvap = 120; //variabile del set fisso della temperatura vapore int settempcaffe = EEPROM.read(0); //variabile modificabile della
int relePompa = 13; //pin tasto apertura int releResistenza = 22; //pin tasto chiusura int switchAcqua = 24; //pin rele apertura
unsigned long t1, dt; //variabili timer per mandare valori al display
pinMode(switchAcqua, INPUT); //ingresso switch acqua calda analogReference( INTERNAL2V56 ); //usa il reference di 2.56V per avere
}
void loop() {
// MAPPATURA TEMPERATURA *******************************
temperatura = map(analogRead(intemperatura), 186, 585, 150, 19); //mappa il segnale proveniente dal LMT85
if (vap==0) // questo serve alla partenza del micro per settare la
{ settemp = settempcaffe; }
// TERMOSTATO************************
if ((temperatura) < (settemp - 1)) // dato per l'isteresi della temperatura { digitalWrite (releResistenza, HIGH); } if ((temperatura) > (settemp)) { digitalWrite (releResistenza, LOW); }
// RICEZIONE STRINGHE DA NEXTION **************************
com = ""; //azzeramento variabile
if (Serial2.available())// in attesa che arrivi un carattere dal Nextion { a=Serial2.read(); }
if(a=="167") //dato inizio stringa da aggiungere nella
{ int start=1; while(start==1) { if (Serial2.available()) { a=Serial2.read();
nella programmazione pulsanti Nextion
{
comando }
else { start=0; // permette di uscire dal ciclo } } } }
premuto e siamo sulla pagina 0 { Serial2.print("bt0.val=0"); // manteniamo il pulsante
if (com == caffeoff ) { digitalWrite (relePompa, LOW); }
if (com == vapon ) // se viene premuto il tasto vapore { vap=1; // settiamo la variabile corrispondente digitalWrite (relePompa, LOW); //disattiviamo la pompa dell'acqua settemp = settempvap; //settiamo il set temperatura con quello del vapore }
{ vap=0; //settiamo la sua variabile a 0 settemp = settempcaffe; //settiamo il set temperatura con
}
if (com == page0) // memorizza la pagina 0 su cui stiamo lavorando { page0on = 1;
}
if (com == page1) // memorizza la pagina 1 su cui stiamo lavorando { page1on = 1;
}
selezionata la pagina relativa { settempcaffe = settempcaffe + 1; EEPROM.write(0, settempcaffe); Serial2.print("settemp.val=" + String (settempcaffe)); // seleziona il modulo numerico scrivendo l'id corrispondente al modulo a cui si vuole inviare e si manda la stringa della variabile Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); }
selezionata la pagina relativa { settempcaffe = settempcaffe - 1; EEPROM.write(0, settempcaffe); Serial2.print("settemp.val=" + String (settempcaffe)); Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); }
if (page1on == 1) // manda il valore del set temperatura solo se la
{ Serial2.print("settemp.val=" + String (settempcaffe)); Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); }
// AZIONAMENTO POMPA DA SWITCH SU VALVOLA DEL VAPORE*************** // DA RIVEDERE NON FUNZIONA LA LOGICA***********************************
if ((digitalRead(switchAcqua) == HIGH) & (vap == 0)) //attiva la
{ digitalWrite(relePompa, HIGH); }
// AGIORNAMENTO TEMPERATURA SU NEXTION ***************************
pagina 0 { dt = millis() - t1; // aggiorna col timer per non sovracaricare la seriale
if (dt > 500) { Serial2.print("t1.txt=\"" + String(temperatura) + "
*C""\""); // manda la temperatura come stringa e *C come caratteri Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); t1=millis(); } if (digitalRead (releResistenza) == LOW) //se il rele della
{ Serial2.print("t1.bco=63488"); //colore rosso per set temperatura raggiunto Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff); }
if (digitalRead (releResistenza) == HIGH) //quando la temperatura scende sotto al set e si attiva il rele resistenza torna il colore normale { Serial2.print("t1.bco=1310"); //colore azzurro dello sfondo del display Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff); }
}
}
--
Saluti da Drizzt, quello vero!
www.agidone.altervista.org
caffeoff ci sono solo quando viene premuto il pulsante sul display, come anche quello del vapore. In pratica la pompa deve essere possibile attivarla e disattivarla dallo
funzionare il pulsante sul display. Ci sto ragionando da un'ora ma non riesco a sgrovigliare una logica e se
singolarmente dallo switch e dal display e le unisco tramite un diodo,
--
Saluti da Drizzt, quello vero!
www.agidone.altervista.org
Non funziona, il led della pompa si eccita solo nell'attimo che premo caffeon pi si spegne subito e nemmeno l'ingresso swacqua fa qualcosa.
Ho anche eliminato tutto il mio codice ma fa uguale, evidentemente vede
Nel frattempo per riposare la mente e vedere se mi venuva un'idea su come risolvere questa cosa, ho predisposto il dimming del display, se non si premono tasti per xTempo la backlight si abbassa al 10% poi appena si preme un qualsiasi tasto torna al 100% :-)
--
Saluti da Drizzt, quello vero!
www.agidone.altervista.org
Si lo avevo intuito e l'ho fatto ma sembra che la funzione || non funzioni, questo il codice,
valori a 0 la pompa non si spegne, in pratica funziona tutto, se lo
mi sembra ci sia altro e comunque se tutti i tre valori sono a zero la funzione if dovrebbe passare a else, mi perdo qualcosa? che stress... PS: scusa se ho cambiato i nomi delle variabili, cerco sempre di rendere
Allora puoi dire tranquillamente che sono incicciuito, cavolo, troppo per la mia piccola mente :-D Porta pazienza, sono troppo vecchio per tutti questi bit byte ecc ecc :-P
comunque non funziona, la pompa non si ferma se tolgo lo switch, allora
ma il "com" del mio codice lo hai tolto ? io ho solo copiato quello che ho scritto, mi sembra strano che non funzioni. Lo riscrivo giusto altrimenti mi sa che succcede qualche altro errore:
if (statovapore == 0) { statoswitch = digitalRead(24); if ((statoswitch == 1) || (statocaffe == 1)){ digitalWrite(relePompa, HIGH); }else{
if (statovapore == 1) { digitalWrite(relePompa, LOW); }
Possibile che ti funzioni tutto senza questo codice? Potresti avere una delle 2 variabili statocaffe e switch a 1 e funzionare ugualmente anche con statovapore a 1
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.