Simboli strani sul display

karma+1
thanks :slight_smile:

Ciao Ragazzi!
Sono ancora alle prese con il progetto sopra indicato. Dai consigli di leo72, ho fatto tutto ciò che mi ha detto cercando di alleggerire il codice e liberare quanta più ram possibile.
Per sapere quanta ram mi rimane libera durante l'esecuzione del programma, ho utilizzato la funzione freeRam() presente nella sua guida al link che lui ha indicato.
Durante l'esecuzione del programma, sto facendo stampare sul display LCD la memoria libera e mi visualizza costantemente 1579byte liberi.
Il bello è che dopo un oretta che arduino è acceso, i simboli strani sul monitor si presentano di nuovo...
uffaaaaa!!!come mai?non ci sto capendo più niente

nessuno ha un consiglio?

Controlla i collegamenti e creati un secondo sketch col minimo indispensabile per il funzionamento del display.
Se è tutto a posto allora il problema è nel codice corrente.

1579 libero vuol dire che ne stai consumando veramente poca, il tuo problema deve essere di carattere hardware.
prova semplicemente a tenere in stampa hello world e vedi cosa fa.

Oppure che lo sketch riempie col tempo la RAM (stack e/o heap che saturano la memoria). Il fatto che prima il problema compariva quasi subito ed ora, a RAM sgombra, compaia in ritardo (perché ci mette di più a consumare tutta la RAM) fa pensare anche a questo.

Ciao ragazzi, scusate il ritardo, ma questi giorni sto costantemente testando Arduino con il monitor acceso e sta continuando a dare problemi.
L'unico modo in cui non da problemi è quando faccio stampare sul monitor delle stringhe del tipo

P1 (memorialibera)
H20: (temperatura) T-c: (temperatura)

In questo modo non da assolutamente problemi. Se gli faccio stampare una cosa del tipo

Programma 1
H20: (temperatura) T-c (temperatura)

Dopo qualche ora inizia a sbiellare.
Per stampare sul monitor sto usando le funzioni lcd.print(F("Programma 1"))....secondo voi quale è il problema?E' possibile che è un problema hardware? vi dico già da adesso che tutti i cavi sono saldati sul monitor, quindi non ci sono falsi contatti o cose del genere....

Se alleghi lo sketch ad un post forse è meglio, qualcuno può dargli un'occhiata.

Questo non è lo sketch completo, è solo dal loop() in giù. Manca tutto quello che c'è sopra (setup, define, inclusione di lib e var globali).

Comunque vedo una marea di chiamate a funzioni varie. Ogni chiamata a funzione incrementa lo stack. Se l'errore viene fuori dopo un po' è probabile che la Ram pian piano si saturi.

Potresti provare con un altro modo. Ogni 10 minuti prova a stampare a video il valore della RAM libera, per vedere se questa si satura nel tempo oppure no. Se non si satura allora ci può essere un errore logico (ad esempio un indice che esce da un array).

Non compila. Mancano le funzioni carica_programma() e accensioneBottone()

oggi ho provato a cambiare le frasi che stampavo sul display lcd ma nulla...sempre stesso problema.
Ho addirittura saldato direttamente i fili sullo schermo facendoli arrivare direttamente ad Arduino senza utilizzare una dashboard, ma nulla. Problema persistente...non so proprio più che fare :cold_sweat:

Allora ci dev'essere un problema di logica per cui dopo un certo lasso di tempo qualcosa "salta".
hai provato col test che ti avevo suggerito l'altro giorno?

leo72:
Potresti provare con un altro modo. Ogni 10 minuti prova a stampare a video il valore della RAM libera, per vedere se questa si satura nel tempo oppure no. Se non si satura allora ci può essere un errore logico (ad esempio un indice che esce da un array).

ah si si si!quello l'ho fatto...avevo inserito nel codice la funzione free Ram che stampava la memoria libera ogni 5 secondi.
La memoria libera risultava sempre costantemente 1579 tenendo acceso Arduino per 2-3 ore

Un altro punto critico è nella funzione readTemp. Ho visto che fai 20 cicli di calcoli molto complessi con logaritmi e divisioni di float.
La RAM libera è sui 1500 byte al di fuori della readTemp. Ma lì dentro?

Il for dentro la funzione readtemp non serve a una mazza. :roll_eyes:
Fa la media di valori fissi.
Devi fare la media di diverse letture del sensore, non la media dei calcoli di una sola lettura. :astonished:

cavolo!!!hai ragione Paolo P! non ci avevo proprio pensato!in questo modo in effetti non faccio proprio nulla! Voi mi consigliate toglierla questo ciclo for?a questo punto se mi complica le cose non mi costa proprio nulla toglierlo, tanto calcolo il valore della temperatura ogni 5 secondi

Sì, è vero. Quel ciclo for così com'è scritto non serve a nulla.

quindi mi consigliate ti toglierlo?in modo da liberare memoria?

hermit274:
quindi mi consigliate ti toglierlo?in modo da liberare memoria?

Sì.

ancora nulla ragazzi. Ho completamente eliminato il ciclo for nella funzione readTemp e dopo un pò lo schermo lcd ha cominciato a dare i numeri...sempre simboli strani sul monitor