Neoxtion display 2.4 in sleep mode

Buongiorno a tutti.
Ho un display touch neoxtion 2.4 collegato ad un Mega che mi fa da web server.
Il tutto esegue un programma per accendere i 4 scaldasonno di casa direttamente da internet, ma attraverso il neoxtion, è possibile comandarli manualmente dalla testata del letto.
Il problema è che lo schermo del neoxtion va per forza spento con la sleep mode, in quanto la camera da letto rimarrebbe illuminata, e la cosa è alquanto fastidiosa, ma in questa modalità lo schemo non riceve comandi seriali, per cui se arriva un cambiamento via web, lo schermo del neotion non si "aggiona" al nuovo stato essendo in "sleep".
Se tolgo la sleep mode, tutto funziona a dovere.
Ho pensato quindi di abbassare la luminosità dello schermo via software dal MEGA dopo tot secondi e di riattivarla alla pressione del tuch screen, ma non riesco.
Qualcuno puo aiutarmi in tal senso?
Allego lo schetch

Scaldasonno_Arduino_Uno.ino (9.13 KB)

Ciao, per farlo diventare lo schermo nero devi inviare il comando dim=0 tramite il metodo sendCommand della libreria, Es:

char [6] commandToSend = "dim=0";
myNextion.sendCommand(commandToSend);

Poi però sul Nextion devi riattivare la luminosità quando tocchi la pagina, per farlo direttamente sul nextion al tocco della pagina detti il dim al valore che vuoi (Es. dim=100), oppure dovrai far "sentire" ad arduino che qualcuno ha toccato la pagina e inviare il solito comando (con valore diverso da zero ovviamente) così come indicato in precedenza
Ti dico anche una cosa anche se so che probabilmente ignorerai la cosa visto che il progetto è praticamente finito, nel tuo programma usi la classe String e questo è male, a lungo andare molto probabilmente ti scontrerai con blocchi improvvisi, sistema che non risponde il tutto apparentemente a casaccio, se ti succederà almeno saprai già a chi dar la colpa... alla classe String. Nei progetti con Arduino è sempre bene non usarla mai, se vuoi giocare d'anticipo sostituisci tutto ciò che ha a che fare con la classe String con le stringhe classiche del C per metterti al riparo da possibili problemi. Inoltre tutte le stringhe fisse (Es. quello che usi per costruire la pagina html) includile nella funzione F(), non occuperanno preziosa memoria

Wow grazie.
in realtà mentre leggevo la tua risposta mi è venuta una illuminazione. ho messo un tasto al neotion che ho chiamato "Buio" e all'evento press ho assegnato dim=0. invece alla page0 al touch release ho dato dim=100.
Funziona senza scrivere codice! quando voglio la luminosità zero schiaccio il pulsante, e quando voglio riattivare lo schermo basta che tocco lo schermo e la luminosita torna al max. ovviamente la seriale del display rimane attiva.
E questo è risolto.
Per quanto riguarda la classe String, devo studiarci un pò, in quanto devo essere sincero ho un po scopiazzato sul web e certe finezze non le conoscevo, ma posso dirti di aver gia utilizzato un sistema simile e il web server in maniera casuale andava in blocco dopo qualche giorno................unico modo era resettare............non si finisce mai di imparare.
anche la Funzione F() stessa cosa.........ora mi metto a studiare ma a 50 anni non è poi cosi facile.
Grazie infinite

Willys70:
Per quanto riguarda la classe String, devo studiarci un pò, in quanto devo essere sincero ho un po scopiazzato sul web e certe finezze non le conoscevo, ma posso dirti di aver gia utilizzato un sistema simile e il web server in maniera casuale andava in blocco dopo qualche giorno................unico modo era resettare............non si finisce mai di imparare.
Grazie infinite

Ehhh non si scappa la classe String porta inevitabilmente a ciò, visto che ti è già successo (e io non lo potevo sapere!) vai tranquillo che ti succederà anche in questo progetto... provare ad inviare il comando e non riuscire perché tutto bloccato o peggio inviare il comando e tornare a casa con tutto spento perché è andato in blocco a me farebbe imbestialire.
E' vero che le stringhe classiche del C sono un po' meno intuitive all'inizio ma poi una volta imparate una manciata di funzioni si riesce a far tutto semplicemente

Sai che ancora si blocca in maniera randomica?
ho letto che le schede di rete con chip W5100 hanno bisogno di avere i pin 4 e 10 settate HIGH direttamente in setup, altrimenti creano problemi di comunicazione con arduino. infatti si blocca solo la sezione di rete, arduino con il nextion non si blocca mai.........vediamo nei prox giorni oggi faccio la modifica dei pin.

La rete dovresti settarla nel setup quindi se ti si blocca in moco casuale punto ancora il dito sull'uso di String, posta il codice modificato che magari qualcos'altro è sfuggito

Willys70:
ho letto che le schede di rete con chip W5100 hanno bisogno di avere i pin 4 e 10 settate HIGH direttamente in setup

... in passato questa cosa era VERA, attualmente non so se la libreria ha ancora questo problema ::slight_smile:

Guglielmo

un po lunghetto ma ci provo
Grazie.

Scaldasonno_Arduino_Mega.ino (9.46 KB)

Prima cosa che mi viene in mente, tutte le stringhe fisse mettile dentro la macro F()

client.println("HTTP/1.1 200 OK.....");
client.println(F("HTTP/1.1 200 OK....."));

Questo ti scarica la memoria utilizzata, tanto credo che spazio per programma ne hai ancora a iosa.
Altra cosa ricicla il più possibile ovvero:

client.print("<a href='/?L=2on'><button  class=\"button\">ACCENDI</button></a> <a href='/?L=2off'><button class=\"button\">SPENGI</button></a>");

Ne hai tante che differiscono colo per il parametro quindi separa e riusa:

char pippo[14] = "<a href='/?L=";
char pluto[100] = "on'><button  class=\"button\">ACCENDI</button></a> <a href='/?L=";
byte numero=2;
...
client.print(pippo);
client.print(numero);
client.print(pluto);
client.print(numero);

la dimensione di pluto è a casaccio non avevo voglia di contare :slight_smile:
Poi non ho capito perché un po' di pagina la leggi da SD e un po la scrivi a mano, potresti pensare di leggere da sd riga per riga, crearti delle parole chiavi da sostituire e ridurre in questo modo drasticamente l'uso della memoria, di crei un array di dimensione fissa (Es. 201 caratteri) e fare in mod0 che ogni linea della pagina non superi i 200 caratteri, in questo modo non riallochi memoria e tutto fila liscio

Ho tralasciato completamente di commentare tutta la parte che usa String che ti è stato detto di eliminare perché nel 90% dei casi è quella a creare i blocchi random (e questo è stato detto millemila volte sul forum), resta con String e cerca pure di imputare blocchi random a cose a casaccio ma alla fine vedrai che la colpevole è lei... poi fai come vuoi ma se non togli String non arriverai mai ad un sistema stabile

grazie fabpolli.
............immagino tu parli di questo pezzo di listato dove usa la String?

if(readString.indexOf("?L=2on") > 0) {// lettura del valore se il LED si deve accendere
// il led sarà acceso
digitalWrite(outPin2, HIGH); // accendo il led

ecc.................

cioé devo trovare un sistema diverso dal readSrting?

perdona la mia infinita ignoranza in materia...............

Esatto ovvero tutto ciò che usa la classe String (String readString; )devi rimuoverlo e sostituirlo con strighe classiche del C (array di char)
Nel tuo caso è anche semplice visto che leggi un carattere alla volta ti basta definirti un array di char abbastana lungo da contenere il comando più lungo che devi gestire (più uno per il carattere terminatore \0 ) e una variabile che ti dica in quale posizione dell'array devi scriverlo, leggi il carattere, lo piazzi nell'array incrementi la variabile indice e prosegui così fino alla fine dei caratteri, quando li hai letti metti nell'array anche il terminatore, poi confronti ciò che hai letto per sapere cosa devi fare.
Il link che ti ho dato è una buona fonte per vedere anche le altre utili funzioni di manipolazione delle stringhe classiche del C

Grazie.
Adesso ho una buona dose di consigli, su cui lavorare.
Appena sarò riuscito a concludere qualcosa penso di postare i risultati casomai servissero a qualcuno.