Buonasera a tutti, premetto che non sono molto pratico, ho scritto questo codice per comandare due relè mediante due pulsanti tramite display Nextion.
Il tutto funziona, al tocco di un tasto sul display il relè corrispondente si eccita, ed al rilascio si spegne.
A volte però (non sempre) succede che pur togliendo il dito dal Touch del display il relè resta eccitato e non ritorna allo stato di riposo, oppure al contrario, con il dito sul display il relè non si eccita............ Mi lascia pensare che quando i pulsanti non rispondono ai comandi, probabilmente Arduino è impegnato in un altra funzione e quindi non avverte il comando da me impartito in quel momento. Ho commesso sicuramente qualche errore nello sketch ma dove non ho idea.....
Premetto che non uso la libreria per gestire i Nextion ma leggo e scrivo direttamente sulla seriale dedicata, il codice non presenta errori in base a quello che dichiari che deve fare.
Credo che la gestione dei pulsanti lato Nextion/libreria nella modalità in cui li usi tu possa soffrire di qualche problema che scatena il comportamento non desiderato.
Come suggerimento posso solo dirti di provare a cambiare modo di operare, se proprio devi mantenere la funzionalità così com'è ovvero finché premo fai qualcosa allora posso suggerirti di lavorare lato Nextion per gestire direttamente li gli eventi premuto e rilasciato, nel codice Nextion ai due eventi ti setti una variabile che da Arduino leggi continuamente in modo da intercettare i vari cambi stato
Buongiorno Fab, innanzitutto grazie.
Ad essere sincero, non so come procedere al tuo suggerimento in quanto non essendo programmatore ho difficoltà (tipo, settare variabile in Nextion e farla leggere da Arduino, oppure la procedura per far leggere e scrivere dalla seriale). Ad ogni modo, se può essere un indizio, ieri ho provato ad aumentare il valore nella riga: if (dt > 800) portandolo a 1500 e il difetto si presenta sporadicamente rispetto a prima.
Male che và mi accontento cosi, in quanto questo genere di progetto mi serve per fine mese ed è importante per risolvere un problema abbastanza delicato.
Grazie
Se il problema è delicato avere software che "a volte" da problemi a me non farebbe dormire sonni tranquilli.
Se il problema è circoscritto all'aggiornamento del testo sul Nextion, come pare di capire visto che se lo fai meno spesso perdi meno tocchi, allora ti propongo di cambiare metodologia e anche qui invece di aggiornare ogni N millisecondi, aggiorna il display solo quando serve.
Ti memorizzi lo stato dei due ingressi in modo da aggiornare il display solo se questi cambiano, una cosa del tipo:
Il codice che ho scritto potrebbe essere ottimizzato, ma ho preferito scriverlo così visto che dici di non essere esperto in modo che sia meno ottimizzato ma più facilmente leggibile
Buonasera Fab, fatto le prove, i pulsanti funzionano bene, nessun fallimento, perfetto.
Ho dovuto aggiungere il secondo finecorsa che mancava nella parte di codice, e fin qui tutto ok.
Quindi diciamo che funziona tutto tranne che quando alimento il circuito, non legge lo stato dei finecorsa.
Per conoscere lo stato devo chiudere i contatti di un finecorsa qualsiasi, e da quel momento legge ogni variazione di stato dei finecorsa....`
Non mi è chiaro cosa intendi con "non legge lo stato del fine corsa" se intendi che la digitalRead fallisce mi sembra veramente strano e ti direi che ci sono problemi di software da debuggare per essere capiti.
Se invece intendi che lo stato del display non corrisponde allo stato dei fine corsa allora non ti resta che implementare un "allineamento" del display nel setup dopo l'inizializzazione del Nextion leggendo gli stati e "informando" il display della reale situazione di partenza
alimento la scheda con i contatti del fine corsa chiusi e sul display non appare la scritta "CLOSE"
A questo punto mi basta aprire i contatti di uno dei finecorsa, e immediatamente inizia ad apparire lo stato sul display (OPEN, CLOSE ecc ecc.).
Quindi penso che bisogna implementare un allineamento del display all'avvio........
Ciao Fab, dopo 8 ore ho risolto:)
Dunque il problema era nell'IDE Nextion.
Per evitare che cambiando pagina perdi lo stato dello switch, è necessario attivare la casella "Global" nella lista degli attributi della casella di testo alla voce "VSCOPE", e non "LOCAL" come avevo fatto precedentemente.
In questo modo anche se cambi pagina, quando ritorni alla pagina dove è presente la casella di testo che indica lo stato dello switch quest'ultima resta invariata indicando lo stato reale del finecorsa.
Ad ogni modo ti ringrazio moltissimo per la pazienza e la comprensione.
Buon wend