malfunzionamento display lcd

leo72:
...
Fino a sabato ero sulle dolomiti ed il max che ho avuto sono stati 24° :wink:
Anzi, sul Sassolungo ho trovato 1 metro e mezzo di neve e 9°, per non parlare di quando sono stato sulla Marmolada :astonished:
...

Ah, ma allora infierisci di proposito ... quasi quasi lo mordo :stuck_out_tongue: XD XD XD

Sì ma ora mi faccio tutto agosto a lavoro con temperature minime di 35° con afa a livelli di palude :sweat_smile:

Scusatemi, ma ora ho un altro problema :frowning:
Il display nel momento in cui riesco a regolare il contrasto e mi stampa in uscita ciò che voglio o non si aggiorna e nonostante io passi un altra tessera la scritta rimane la medesima, o semplicemente quando passo un'altra tessera scompare la stampa e il display rimane vuoto.
Potete nuovamente darmi una mano? :slight_smile:

Lo sketch è il medesimo o l'hai modificato?
Di quali tessere stai parlando?

E' un controllo accessi, quindi sto parlando delle tessere che passo sopra il lettore RFID. In base alla tessera passata (ognuna con un codice assegnata ad un soggetto) appare stampato a display il nome del soggetto a cui é associata la tessera.
Si, lo sketch é il medesimo :slight_smile:

Quindi i dati delle tessere vengono passate tramite URL?

Tu stampi a display qui

lcd.clear();
lcd.setCursor (0,0);  
lcd.print (FULLNAME);
lcd.setCursor (0,1);
lcd.print (TIMESTAMP);

ma cosa ti stampa qui

Serial.println("Result = " + RESULT);
Serial.println("Tagid = " + TAGID);
Serial.println ("Fullname = " + FULLNAME);
Serial.println ("Timestamp = " + TIMESTAMP);

Le risposte corrette o delle stringhe vuote?

Poi dovresti controllare il quantitativo di memoria libera. Con string ne utilizzi parecchia.
--> Arduino Playground - AvailableMemory

Another method that seems to be even simpler is the following:
Declare this function:

int freeRam () {

extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}




and call it anywhere in your program like that: `Serial.println(freeRam());`

Dove c'é scritto Serial.print ecc, stampo separatamente i "blocchi" di cui é composta la stringa che mi viene data in risposta; non é indispensabile ma é giusto per vedere anche sul monitor seriale se ciò che stampa é corretto

Ok, ma io ti chiedevo cosa stampa, nel senso... ti arriva la risposta corretta su seriale e poi LCD non stampa niente o anche su seriale non ti arriva niente e quindi LCD non stampa niente.

Il seriale é SEMPRE corretto, quindi il problema sta nel passaggio dei dati sul display..

Prima di stampare a display accendi dei LED. Non è che li hai collegati o dichiarati insieme al LCD?

const int ledPin =  6;
const int ledPin1 =  8;
pinMode(ledPin, OUTPUT);  
pinMode(ledPin1, OUTPUT);

Come inizializzi il display LCD adesso?

LiquidCrystal lcd(..., ..., ..., ..., ..., ...);

I led si accendono in base alla tessera passata. Se é "corretta" (già presente nel database) si accende il led verde, altrimenti quello rosso. Non sono dichiarati all'inizio.. all'inizio ho LiquidCrystal lcd (9,7,5,4,3,2)

Non vedo, ad occhi, nessun motivo software perché non debba funzionare, se non l'esaurimento della memoria. Ma ti dovrebbe dare anche errori sulla seriale o comunque comportamenti anomali.
Prova ad sostituire con questo

lcd.clear();
lcd.setCursor (0,0);  
lcd.print ("N: ");
lcd.print (FULLNAME);
lcd.setCursor (0,1);
lcd.print ("T: ");
lcd.print (TIMESTAMP);

e dimmi se almeno stampa la N e la T.

Non li stampa, da segnali strani sul disply tipo rettangoli tutti illuminati, frecce, punti di domanda ecc.. quelli li da sempre a parte rari casi in cui appare la scritta corretta, es.

Mario Rossi
12/4/2002 16:46

Ultimo test.
Aggiungi questa funzione in fondo allo sketch

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Dopo questo blocco

Serial.println("Result = " + RESULT);
Serial.println("Tagid = " + TAGID);
Serial.println ("Fullname = " + FULLNAME);
Serial.println ("Timestamp = " + TIMESTAMP);

aggiungi

Serial.print("Ram: ");
Serial.println(freeRam());

Che valore viene stampato?

Stampa il valore 224

E se lo inserisci anche dopo il blocco di stampa su LCD?

lcd.clear();
lcd.setCursor (0,0);  
lcd.print ("N: ");
lcd.print (FULLNAME);
lcd.setCursor (0,1);
lcd.print ("T: ");
lcd.print (TIMESTAMP);
Serial.print("Ram: ");
Serial.println(freeRam());

Che valore restituisce?

Sempre 224, in entrambi i casi

Bene... nel cilindro non è rimasto più nulla. Non so che altre soluzioni proporti. =(

ok.. grazie mille lo stesso :frowning:

Comunque, mi rimane il dubbio sul quantitativo di memoria.
Hai sostituito tutti i comandi Serial.print("xxxxx"); e lcd.print("xxxxx"); con Serial.print(F("xxxxx")); e lcd.print(F("xxxxx")); ?

Se alleghi lo sketch attuale te lo converto in un attimo.