Arduino Mega2560 e display Nextion

Dec 28, 2021 86 Replies

Il 04/01/2022 17:45, Franco Af ha scritto:

io volevo regolare la temperatura con decimi di grado ma facendo delle

l'uscita digitale che fa alcuni lampeggi, ora sto provando a temperatura

temperatura = map(analogRead(intemperatura), 186, 585, 150, 19);

settempoff=settemp+1;

if ((temperatura) < (settemp)) { digitalWrite (22, HIGH); } if ((temperatura) > (settempoff)) { digitalWrite (22, LOW); }

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 04/01/2022 17:45, Franco Af ha scritto:

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 :-(

if ((com == caffeon ) & (vap==0)) { digitalWrite (relePompa, HIGH); }

if (com == caffeoff ) { digitalWrite (relePompa, LOW); }

if ((digitalRead(switchAcqua) == HIGH) & (vap == 0)) //attiva la pompa per l'acqua calda { digitalWrite(relePompa, HIGH); }

if ((digitalRead(switchAcqua) == LOW) & (vap == 0)) { digitalWrite(relePompa, LOW); }

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 05/01/2022 14:35, Franco Af ha scritto:

usare gli operatori di confronto

pompa attiva quando:

if ((com == caffeon ) && (digitalRead(switchAcqua) == HIGHT) && (vap == 0)) //attiva la pompa per l'acqua calda {

digitalWrite(relePompa, HIGH); }

pompa disattiva quando:

if ((com == caffeoff ) && (digitalRead(switchAcqua) == LOW) && (vap == 0)) { digitalWrite(relePompa, LOW); }

Altrimenti mi devi fare uno schemino giusto che non capisco

sono vecchio mi rincoglionisci facilmente :)

Il 05/01/2022 14:35, Franco Af ha scritto:

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

void setup() { Serial.begin(9600); Serial2.begin(9600); //seriale Nextion

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

Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff); } if ((com == caffeon ) && (vap==0)) { digitalWrite (relePompa, HIGH); }

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 MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 05/01/2022 15:15, Franco Af ha scritto:

Scusa ho visto solo ora il tuo post, ora provo poi ti dico, effettivamente alle tre condizioni non avevo pensato :-)

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 05/01/2022 15:15, Franco Af ha scritto:

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 MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

segna passi che dovrebbe fare il programma, serve uno schema

pompa attiva : caffeon switch attivo valvola attiva

pompa attiva : caffeon switch disattivo valvola attiva

pompa disattiva : caffeoff switch disattivo valvola disattiva

pompa disattiva : caffeoff switch attivo valvola disattiva

Il 05/01/2022 16:05, Franco Af ha scritto:

formatting link

oppure

questi due lo devono fare in modo svincolato fra loro.

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 05/01/2022 16:25, Drizzt do'Urden ha scritto:

formatting link

-- Saluti da Drizzt, quello vero!

formatting link
MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!!
formatting link

Il 05/01/2022 16:36, Drizzt do'Urden ha scritto:

contatto aperto, vapore off contatto chiuso.

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 05/01/2022 16:37, Drizzt do'Urden ha scritto:

primo livello :)

Io mi attengo allo schema, poi facciamo le modifiche, "int swacqua" dichiarala all'esterno

if(vap == 0){ //vapore off interruttore chiuso if (swacqua || (com == caffeon ) ){ // se switch == 1 chiuso oppure

// attiviamo pompa digitalWrite(relePompa, HIGH);

} else{

digitalWrite(relePompa, LOW); } }

if(vap == 1){ vapore on interruttore aperto digitalWrite(relePompa, LOW); }

verifica se funziona tutto

Il 05/01/2022 18:04, Franco Af ha scritto:

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 MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

hai messo 2 pulsanti caffeon e caffeoff ?

non confrontarlo con com I comandi mettili sempre in variabili.

cfonoff lo metti a 1 quando arriva caffeon e a 0 quando arriva caffeoff

if (swacqua || (cfonoff == 1 ) ){

Il 05/01/2022 19:17, Franco Af ha scritto:

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

if (statovapore == 0)

{ statoswitch = digitalRead(24); if ((statoswitch == 1) || (statocaffe == 1)) digitalWrite(relePompa, HIGH); } else { digitalWrite(relePompa, LOW);

} Serial.println(statocaffe); Serial.println(statoswitch); Serial.println(statovapore); Serial.println(" "); delay(1000);

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

Il 05/01/2022 22:16, Drizzt do'Urden ha scritto:

io ho scritto questo, che appunto ti dovrebbe fermare a pompa :

if(vap == 0){ if (swacqua || (com == caffeon ) ){ digitalWrite(relePompa, HIGH); } else{

} }

if(vap == 1){ vapore on interruttore aperto digitalWrite(relePompa, LOW); }

Il 06/01/2022 11:57, Franco Af ha scritto:

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

if ((digitalRead(inSwitch) == HIGH) && (statovapore == 0)) { digitalWrite(relePompa, HIGH); } if ((digitalRead(inSwitch) == LOW) && (statocaffe == 0)) { digitalWrite(relePompa, LOW); }

Saluti da Drizzt, quello vero! www.agidone.altervista.org MAI PIU' UN CESSO DI OPEL IN VITA MIA!!!! http://www.tappezzeriagraziella.com/

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{

} else { digitalWrite(relePompa, LOW);

}

NEl "tuo" codice credo manchi questo:

if ((statocaffe == 1) && (statovapore == 0)) { digitalWrite(relePompa, HIGH); }

poi questa:

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

controlla se statoswitch restituisce veramente 1 o -1 altrimenti

if ( (statoswitch == HIGH) || (statocaffe == 1)){

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required