Go Down

Topic: LCD, visualizzare pagine in modo ciclico (Read 708 times) previous topic - next topic

nid69ita

Cosa hai cambiato ? Parrebbe aver risolto il page++ senza lo spazio ?  :o
my name is IGOR, not AIGOR

Patrick_M

no, ha messo timer=millis() nel primo if come è giusto che sia :D

ho verificato .... page funziona con o senza spazi e lo switch case funziona anche con le graffe nei case, potenza del compilatore che aggiusta tutto lui ;)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

dinopaolo

Bene, grazie a tutti.

Abbiamo risolto il problema del ritardo ciclico della stampa.

Adesso devo sostituire ogni pagina di stampa con paginaLCD1, paginaLCD2

paginaLCD1() e paginaLCD2(), sono due funzioni che al loro interno contengono la formattazione del testo e le variabili da visualizzare.

Ho pensato di memorizzare il nome delle funzioni in un'array e richiamarle in sequenza, ma ho dei dubbi.

Attendo suggerimenti.....

nid69ita

Puoi farlo ma mi pare eccessivo. Quante pagine sono ?
my name is IGOR, not AIGOR

dinopaolo

Sono 3 pagine,

Le pagine sono già strutturate, ognuna una funzione.

Il mio problema è come richiamarle dal ciclo di ritardo (vedi post iniziale per descrizione)

fabpolli

Richiami la funzioen che visualizza la pagina dell'lcd subito prima (o subito dopo) a dove stami sul serial monitor "pagina uno", "pagina due", ecc.

dinopaolo

Si, è quello che cerco di fare  :smiley-confuse:


questo è il ciclo di ritardo dal quale partire:

Code: [Select]

if (millis() - timer > ciclo)
   {
   Serial.print("nuova pagina - ");
   Serial.println(page);
   timer = millis();
   page++;
      if (page>2) page = 1;
   }


mettiamo che le due funzioni che richiamano due pagine da visualizzare si chiamano:
 paginaLCD1() e  paginaLCD2()

come le richiamo?


nid69ita


Code: [Select]
switch(page)
{ case 1: paginaLCD1(); break;
  case 2: paginaLCD2(); break;
}


Molto semplicemente con switch
my name is IGOR, not AIGOR

dinopaolo

Code: [Select]
switch(page)
{ case 1: paginaLCD1(); break;
  case 2: paginaLCD2(); break;
}


Molto semplicemente con switch
dimentichi che le due pagine devono essere chiamate in modo ciclico con intervallo di almeno 1" senza usare delay()

Patrick_M

non ha dimenticato nulla :D

sei tu che devi trovare il punto esatto dove aggiungere quelle 4 righe ;)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

nid69ita

#25
Jun 13, 2018, 09:17 pm Last Edit: Jun 13, 2018, 09:17 pm by nid69ita
Grazie @Patrik.
Si, @dinopaolo, non è che riscrivo io il tuo programma. Ti dò solo uno spunto.
Se no a che serve il pezzo precedente che si basa su millis() ??
my name is IGOR, not AIGOR

dinopaolo

Grazie per il supporto, ma a volte mi lascio cogliere dalla pigrizia


Pensavo di dover utilizzare typedef e puntatori, ma la risposta era/è più semplice

Code: [Select]
void loop() {

  if (millis() - tempo > ciclo)
   {
    switch (page){
      case 0:  LCD1(); break;
      case 1:  LCD2(); break;
    }
   tempo = millis();
   page++;
   if (page>2) page = 0;
   }
}

nid69ita

Pensavo di dover utilizzare typedef e puntatori, ma la risposta era/è più semplice
Puoi anche farlo, ma per un programma con poche funzioni mi pare ti complica solo la vita.
my name is IGOR, not AIGOR

Go Up