correzioni delle varie variabili, esattamente come dovrebbe funzionare e come funziona il mio ultimo. Questo il tuo come l'ho modificato:
if (statovapore == 0) { if ((digitalRead(inSwitch)==HIGH) || (statocaffe == 1 ) ) { digitalWrite(relePompa, HIGH); }
else { digitalWrite(relePompa, LOW); } }
if (statovapore == 1) { digitalWrite(relePompa, LOW); }
sull'ingresso dello switch, immagino che sia merito di questa resistenza
variabili sul monitor dell'IDE, quella dello switch variava regolarmente da 1 a 0. Quindi sia il tuo codice che il mio, anche se fatti con logiche diverse funzionano entrambi alla stessa maniera, mi chiedo se sia normale :-) Questo il mio codice:
ps: con il tuo aiuto ho anche capito che i dati dalla seriale arrivano un carattere alla volta ad ogni ciclo macchina, sembra scontato per chi lo sa ma credevo che la stringa arrivasse tutta in una volta, ecco
caratteri ricevuti, in tutti i tutorial che ho seguito nessuno ha mai specificato questa cosa. :-)
Questo il codice completo:
/* * FUNZIOZNAMENTO CONTROLLO MACCHINA CAFFE'
nella lettura del sensore LMT85 * Si usa un display Nextion touch
per quando si spegne la macchinetta * La pompa dell'acqua si attiva col proprio pulsante a doppia azione e con la manopola dell'acqua
I dati al display vengono mandati solo ai moduli della pagina selezionata
il timer millis() per non sovracaricare la seriale * * */ #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
int statocaffe = 0; int statovapore = 0;
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 inSwitch = 24; //pin rele apertura
unsigned long t1, dt; //variabili timer per mandare valori al display unsigned long dim1, dim2; //variabili timer per backlight display
pinMode(inSwitch, 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 (statovapore==0) // questo serve alla partenza del micro per
{ 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 } } } }
stato premuto e siamo sulla pagina 0 { Serial2.print("bt0.val=0"); // manteniamo il pulsante
// USO E INTERBLOCCO SWITCH VALVOLA ACQUA***************************
if(statovapore == 0)//verifica che lo stato del vapore sia a zero, vapore NON selezionato { if ((digitalRead(inSwitch)==HIGH) || (statocaffe == 1 ) ) //se
{ digitalWrite(relePompa, HIGH); }
else { digitalWrite(relePompa, LOW); } }
bloccata { digitalWrite(relePompa, LOW); }
/* // SISTEMA DIVERSO PER USO E INTERBLOCCO SWITCH VALVOLA ACQUA********************* if ((digitalRead(inSwitch) == HIGH) && (statovapore == 0)) { digitalWrite(relePompa, HIGH); } if ((digitalRead(inSwitch) == LOW) && (statocaffe == 0)) { digitalWrite(relePompa, LOW); }
*/
// COMANDI CAFFE' E VAPORE DA DISPLAY****************************
if ((com == caffeon) && (statovapore==0)) { statocaffe=1; digitalWrite(relePompa, HIGH); dimming(); //rimanda al ciclo che porta la backlight l 100% }
if (com == caffeoff ) { statocaffe = 0; digitalWrite(relePompa, LOW); dimming(); //rimanda al ciclo che porta la backlight l 100% }
if (com == vapon ) // se viene premuto il tasto vapore { statovapore=1; // settiamo la variabile corrispondente statocaffe=0; digitalWrite (relePompa, LOW); //disattiviamo la pompa dell'acqua settemp = settempvap; //settiamo il set temperatura con quello del vapore dimming(); //rimanda al ciclo che porta la backlight l 100% }
{ statovapore=0; //settiamo la sua variabile a 0 //statocaffe = 0; settemp = settempcaffe; //settiamo il set temperatura con
dimming(); //rimanda al ciclo che porta la backlight l 100% }
if (com == page0) // memorizza la pagina 0 su cui stiamo lavorando { page0on = 1;
dimming(); //rimanda al ciclo che porta la backlight l 100% }
if (com == page1) // memorizza la pagina 1 su cui stiamo lavorando { page1on = 1;
dimming(); //rimanda al ciclo che porta la backlight l 100% }
selezionata la pagina relativa { settempcaffe = settempcaffe + 1; EEPROM.write(0, settempcaffe); Serial2.print("settemp.val=" + String (settempcaffe)); // selezionare il modulo numerico scrivendo l'id corrispondente al modulo a cui si vuole inviare Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); dimming(); //rimanda al ciclo che porta la backlight l
100% }
selezionata la pagina relativa { settempcaffe = settempcaffe - 1; EEPROM.write(0, settempcaffe); Serial2.print("settemp.val=" + String (settempcaffe)); // selezionare il modulo numerico scrivendo l'id corrispondente al modulo a cui si vuole inviare Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); dimming(); //rimanda al ciclo che porta la backlight l
100% }
if (page1on == 1) // manda il valore del set temperatura solo se la
{ Serial2.print("settemp.val=" + String (settempcaffe)); // selezionare il modulo numerico scrivendo l'id corrispondente al modulo a cui si vuole inviare Serial2.write(0xff); // bisogna mandare i tre caratteri di fine trasmissione Serial2.write(0xff); Serial2.write(0xff); }
// 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); }
}
dim1 = millis() - dim2; // timer per abbassare la backlight se non si premono tasti per il tempo selezionato
if (dim1 > 30000) { Serial2.print("dim=10"); Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff); }
}
void dimming() //serve per riportare la retroilluminazione al 100& se si preme un tasto { Serial2.print("dim=100"); Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff); dim2=millis(); }
--
Saluti da Drizzt, quello vero!
www.agidone.altervista.org
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!!
http://www.tappezzeriagraziella.com/
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.