Simboli strani sul display

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

Non è che per caso l'inizializzazione ldc è errata, io non ricordo i parametri che vuole, magari c'è qualche pin in comune con altro.

Ciao.

hermit274:
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

Crea uno sketch di test che stampi un semplice contatore incrementale sul display. Se anche questo dopo un po' perde colpi c'è qualcosa che non va nel display.

A livello di circuito, non è che il tuo programma sbarella quando magari viene attivato qualcosa? Hai per caso alimentazioni in comune con l'Arduino? Qualcosa che potrebbe far fare un salto di tensione? O che potrebbe consumare molta corrente?

No, ho controllato. Sono stato attentissimo nel collegare il monitor seguendo i pin giusti. Ho controllato e ricontrollato lo schema più volte ed è tutto collegato nel modo giusto.

Ragazzi, vi chiedo una piccola cosa, non vorrei che questo fosse il problema di tutto.
Se date uno sguardo al codice, definisco il pin_motore 10. Questo pin viene utilizzato per pilotare un relè a 6V tramite un transistor.
Il relè è alimentato da un alimentatore esterno, quindi l'assorbimento della bobina non viene "sentito" da Arduino.
Per provare il codice, che mi state aiutando a correggere, fino ad adesso ho collegato il relè non facendo passare la 220V (i 220V servono per avviare o no il motore). In questo modo tutto funziona perfettamente per un bel pò di ore.
Appena attacco la 220V, dopo un pò il monitor inizia a sbiellare.
Ho notato che quando il relè attacca e poi stacca, alimentando il motore, c'è un piccolo "sfiammamento" nel relè dovuto ovviamente all'assorbimento del motore.
Potrebbe essere il campo magnetico generato dello "sfiamamento" a far sbiellare così tanto il monitor?

Hai messo un diodo in antiparallelo sul relè?

ho seguito questo schema:

ok. :wink: