Arduino Mega2560 e display Nextion

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/
Reply to
Drizzt do'Urden
Loading thread data ...

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/
Reply to
Drizzt do'Urden

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

usare gli operatori di confronto

Reply to
Franco Af

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

Reply to
Franco Af

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/
Reply to
Drizzt do'Urden

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/
Reply to
Drizzt do'Urden

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/
Reply to
Drizzt do'Urden

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

Reply to
Franco Af

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/
Reply to
Drizzt do'Urden

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

Reply to
Drizzt do'Urden

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/
Reply to
Drizzt do'Urden

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

Reply to
Franco Af

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/
Reply to
Drizzt do'Urden

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 ) ){

Reply to
Franco Af

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/
Reply to
Drizzt do'Urden

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); }

Reply to
Franco Af

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/
Reply to
Drizzt do'Urden

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

Reply to
Franco Af

controlla se statoswitch restituisce veramente 1 o -1 altrimenti

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

Reply to
Franco Af

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.