TFT Nextion e problema comandi loop

Buona sera e scusate il disturbo.

I avrei fatto un programmino però ho problemi.

Questo è un pezzo del file.ino di arduino, non volevo appesentire il sito.

Se utilizzo tutto il codice non mi funzionano i bottoni; se invece commento la parte Calendario() in void loop(void) i bottoni funzionano.

Guardando la seriale si nota che quando utilizzo tutto il codice:

recvRetCommandFinished ok
recvRetCommandFinished err -> pressione del bottone
ecc ecc

Mentre se commento Calendario() si vede passare:

recvRetCommandFinished ok
[1185:1,29,b0] -> pressione del bottone giusto
recvRetCommandFinished ok

Perchè solo se commento Calendrio(), che fa solo il riembimento delle variabili in Nextion è funziona tutto all'infuori del bottone b0, mi funziona la pressione dei tasti e nell'altro caso mi da err alla pressione?

void b2PopCallback(void *ptr)
{
  pgCalendario.show();
}
 
void bsetPopCallback(void *ptr)
{
  pgSetData.show();
  n0.setValue(datario.ora);
  n1.setValue(datario.minuti);
  n2.setValue(datario.giorno);
  n3.setValue(datario.mese);
  n4.setValue((int)datario.anno/100);
  n5.setValue(datario.anno-(((int)datario.anno/100))*100);
}
 
void setup() {
....................
  bset.attachPop(bsetPopCallback, &bset);
  b2.attachPop(b2PopCallback, &b2);
  memset(myStr, 0, sizeof(myStr)); 
}
  
void Calendario()
 {
    memset(myStr, 0, sizeof(myStr));
    MI.setValue(datario.minuti);
    HH.setValue(datario.ora);
 
    AAAA.setValue(datario.anno);
    MM.setValue(datario.mese);
    GG.setValue(datario.giorno);
    GGG.setText(dayNames[datario.g_setti]);
 
    sprintf(myStr,  "%s°C", floatToString(myStr, Temperatura_Ambiente(), 1));
    TC.setText(myStr);
    sprintf(myStr,  "%s°C", floatToString(myStr, Temperatura_Acquario(), 1));
    TA.setText(myStr);
    sprintf(myStr,  "%s %%", floatToString(myStr, Umidita_Ambiente(), 1));
    Hu.setText(myStr);
    sprintf(myStr,  "%s %%", floatToString(myStr, Leggi_pH(), 1));
    pH.setText(myStr);
 
    LeggiRele();
    imgOUT1.setPic((bitRead(Rele, 0))?6:(bitRead(ProgRele, 0))?7:8);
    imgOUT2.setPic((bitRead(Rele, 1))?6:(bitRead(ProgRele, 1))?7:8);
    imgOUT3.setPic((bitRead(Rele, 2))?6:(bitRead(ProgRele, 2))?7:8);
    imgOUT4.setPic((bitRead(Rele, 3))?6:(bitRead(ProgRele, 3))?7:8);
    imgOUT5.setPic((bitRead(Rele, 4))?6:(bitRead(ProgRele, 4))?7:8);
    imgOUT6.setPic((bitRead(Rele, 5))?6:(bitRead(ProgRele, 5))?7:8);
    imgOUT7.setPic((bitRead(Rele, 6))?6:(bitRead(ProgRele, 6))?7:8);
    imgOUT8.setPic((bitRead(Rele, 7))?6:(bitRead(ProgRele, 7))?7:8);
    lunario();
    imgMoon.setPic(moonphase()+8);
    memset(myStr, 0, sizeof(myStr));
 }
  
 void loop(void)
 {
  nexLoop(nex_listen_list);
  leggi_datario();
  LeggiTasti();
  Calendario();
 }

Cosa scrivo di sbagliato? E' come se non ci fosse sincronismo fra la pressione del tasto e il loop del programma, in poche parole non becco mai il tempo giusto!!! Mi potreste aiutare per piacere?

Buonasera,
essendo il tuo primo post, ti chiederei cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

Fatto, pensavo di averlo fatto quando mi sono registrato.
;
Ma nessun aiuto?

Buona sera visto che nessuno mi ha ancora risposto, ho provato ad acquistare “Arduino ZERO” e sorpresa delle sorprese non funziona più nessuna libreria.
Intanto la Libreria Nextion non funziona perchè da sempre errore:

NexUpload.cpp:17:28: fatal error: SoftwareSerial.h: No such file or directory

 #include <SoftwareSerial.h>

mentre se compili con un altro arduino funziona.
In qualche modo potete, qualcuno, darmi una mano?

Mmmm … dove hai visto che la SoftwareSerial sia stata implementata per la Zero ? ? ? :o
Guardando nelle librerie non la vedo né per architettura SAM né SAMD … quindi, non credo esista.

Del resto, anche nella documentazione della SoftwareSerial NON se ne parla …
… un tempo c’erano solo gli ATmega (AVR) ora vedo che c’è un accenno alla Arduino 101 ovvero a quella con processore Intel x86, ma non sono convito che anche li ci sia (almeno, nella cartella libraries, dentro alla cartella della architettura Intel, non c’è).

Quindi … non puoi usarla.

Guglielmo

Ah ... ripeto, la Zero è una scheda ad architettura SAMD e ... devi verificare esattamente perché le librerie specifiche per Arduino sono state sempre pensate per architettura AVR quindi ... al momento ben poche vanno su altre MCU.

Guglielmo

Dove l' hai trovato?
Arduino Zero é una scheda pochissimamente diffusa. Inoltre non ha una controller AVR come le ATmega ma un Controller 32 Bit che é del tutto diverso. La maggior parte delle librerie per Arduino non sono state adeguate alla Zero.
Non é una sorpresa che le librerie non Ti funzionano sulla Zero; non sono state adeguate.
Ciao Uwe

Tu sai che la Zero funziona a 3,3V e non puoi metterci 5V ai pin?
Ciao Uwe

Arduino Zero - Arduino Forum é la parte del forum dedicato alla ZERO.
Prova a cercare o di porre il Tuo problema lí(in lingua inglese!).

Ciao Uwe

Il nextion funziona a 5v come alimentazione, ma rx e tx funzionane anche a 3.3v; quindi basta alimentare con un 5v esterno e collegare la seriale ai normali pin rx-tx e funziona tranquillamente (c'è scritto nelle specifiche del display).

Lo so che non è il forum giusto ma io non volevo chiarimenti sulle librerie dello Zero (anche se ho trovato il problema, basta cambiare programma utilizzando la versione 1.7.10 dove all'interno c'è anche la libreria SoftwareSerial fatta apposta).

Io vorrei fare in modo di far funzionare con arduino normale, lo Zero lo tirato fuori perchè essendo più veloce di clock pensavo di risolvere ma putroppo le librerie non funzionano e dovrei rimettermi a riscriverlo apposta.

Lasciando stare Zero, mi potete dare una mano a capire il mio problema al primo post?

Grazie

Se non alleghi tutto il codice credo sia difficile trovare l'errore.

e non ci sta tutto ma quello che ho postato è cio che fa il resto sono solo impostazioni

Valerio1975:
Lo so che non è il forum giusto ma io non volevo chiarimenti sulle librerie dello Zero (anche se ho trovato il problema, basta cambiare programma utilizzando la versione 1.7.10 dove all'interno c'è anche la libreria SoftwareSerial fatta apposta).

Ma hai un Genuino Zero oppure un Arduino M0 o Arduino ZERO PRO?

L' IDE 1.7.10 é della concorrenza. Chiedi aiuto nel Forum della arduino.org.

Ciao Uwe

Valerio1975:
e non ci sta tutto ma quello che ho postato è cio che fa il resto sono solo impostazioni

Lo ALLEGHI, non lo posti. Lo alleghi come file.
Quando posti c'e' voce "Attachments and other options" e poi attach di un file

Questo è il file principale, ok così?

Gestione_Acquario_2_0.ino (12.1 KB)

Alla faccia del programmino :o
Hai un bel codice direi pure complesso, visto che usa librerie particolari per gestire i tft Nextion (cosè una specie di pseudo-linguaggio ? Sue direttive ?)
Difficile trovare come errore. Io ti suggerirei di provare a lasciare la chiamata a Calendario() e di provare a commentare pezzi dentro alla Calendario(), cercando di capire quale riga/righe danno problemi.

C’e’ anche una riga strana nel stup:
!sensors.getAddress(AcquariumThermometer, 0);
Quel esclamativo davanti non ha senso. E’ il not sui bit, viene accettato ma non serve a nulla visto che non assegni il valore di ritorno negato ad una variabile.
E la funzione che legge i tasti, ha degli if non completi:

void LeggiTasti()
{ Tasto = Bottoni.fullread();
  for (int i = 0; i < 7; i++)
  { if (int(Tasto) == Tasti[i]) 
    {    }
    if (int(Tasto) == 208) 
    {    }
  }
}

nid69ita:
Alla faccia del programmino :o
Hai un bel codice direi pure complesso, visto che usa librerie particolari per gestire i tft Nextion (cosè una specie di pseudo-linguaggio ? Sue direttive ?)
Difficile trovare come errore. Io ti suggerirei di provare a lasciare la chiamata a Calendario() e di provare a commentare pezzi dentro alla Calendario(), cercando di capire quale riga/righe danno problemi.

C’e’ anche una riga strana nel stup:
!sensors.getAddress(AcquariumThermometer, 0);
Quel esclamativo davanti non ha senso. E’ il not sui bit, viene accettato ma non serve a nulla visto che non assegni il valore di ritorno negato ad una variabile.
E la funzione che legge i tasti, ha degli if non completi:

void LeggiTasti()

{ Tasto = Bottoni.fullread();
  for (int i = 0; i < 7; i++)
  { if (int(Tasto) == Tasti[i])
    {    }
    if (int(Tasto) == 208)
    {    }
  }
}

grazie mille, la libreria è un equivalente ha solo una gestione un po diversa.
La funzione Tasti è solo li non serve a nulla, l’avevo messa prima di mettere il display che fa tutto lui.
Il punto ! lo trovai la prima volta che vidi come funzionava la libreria e l’ho lasciato, ma se non serve lo tolgo.
Ho fatto delle prove e sarebbe la funzione della data e ora che da noia.
L’ho messo tr un if utilizzando millis() a 40 secondi (tanto i secondi non li ho e i vari controlli va bene anche ogni 40 secondi) così ho il tempo di premere il pulsante sul displey e farlo leggere senza che mi monti sopra la lettura dell’orologio.