compaiono simboli strani sul mio schermo lcd e smette di funzionare

ho un arduino uno con un dht11, un servomotore, un modulo relè e uno schermo lcd attaccati che idealmente dovrebbe restare accesso e perfettamente funzionante per 20 giorni.
lo schermo lcd spesso smette di funzionare a caso, compaiono dei caratteri strani(sempre diversi) e non si aggiorna più; l’unico modo per farlo ripartire è riavviarlo o aprire e chiudere il monitor seriale(che smette di funzionare insieme allo schermo).
l’unico modo in cui l’errore non si verifica è se il modulo relè è scollegato.

questo è il codice:

#include <Servo.h>
#include <LiquidCrystal.h>
#include <DHT.h>

int rele=2;
int t,u,temperatura=39,c0=0,c=0,c1=0,c2=0;
int m=0,h=0,g=1;
extern unsigned long timer0_millis;
DHT dht(4,DHT11);
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
Servo servomotore;

void resetMillis() {
  cli();
  timer0_millis = 0;
  sei();
}

void setup() {
  dht.begin();
  lcd.begin(16, 2);
  servomotore.attach(6);
  pinMode(rele, OUTPUT);
  Serial.begin(9600);
  lcd.setCursor(0, 0);
  lcd.print("T= ");
  lcd.setCursor(5, 0);
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("U= ");
  lcd.setCursor(5, 1);
  lcd.print("%");
  lcd.setCursor(7, 0);
  lcd.print("tempo:");
  lcd.setCursor(9, 1);
  lcd.print("g");
  lcd.setCursor(12, 1);
  lcd.print("h");
  lcd.setCursor(15, 1);
  lcd.print("m");
}

void loop() {
  delay(1000);
  t=dht.readTemperature();
  u=dht.readHumidity();
  Serial.print("temperatura = ");
  Serial.print(t);
  Serial.println(" C");
  Serial.print("umidità = ");
  Serial.print(u);
  Serial.println(" %");
  lcd.setCursor(3,0);
  lcd.print(t);
  lcd.setCursor(3,1);
  lcd.print(u);
  lcd.setCursor(7,1);
  lcd.print(g);
  int tempo=(millis()/1000);
  if (m==0) {lcd.setCursor(13, 1);
            lcd.print("0");}
  if (h==0) {lcd.setCursor(10, 1);
            lcd.print("0");}
  if (tempo>58) {resetMillis();
                 m++;}
  if (m>0) {lcd.setCursor(13, 1);
            lcd.print(m);}
  if (m>59) {m=0;
            lcd.setCursor(13, 1);
            lcd.print("  ");
            h++;}
  if (h>0) {lcd.setCursor(10, 1);
            lcd.print(h);}
  if (h>23) {h=0;
            lcd.setCursor(10, 1);
            lcd.print("  ");
            g++;}
  if(t>temperatura){
    digitalWrite(rele, HIGH);
  }
  else{
    digitalWrite(rele, LOW);
  }
  if(u<60){if(c2==0){servomotore.write(150);
                     delay(40);
                     servomotore.write(170);}
                     c2++;
                     if(c2==50){c2=0;}
           }
}

lo schema del circuito non riesco a farlo perchè su tinkercad non ci sono i moduli relè.

allego le foto dello schermo.

non ho idea di che cosa possa essere, grazie in anticipo per l’aiuto.

>thejack02: in conformità al REGOLAMENTO della sezione Italiana del Forum, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai già posto la stessa/simile domanda QUI.

Non solo, in quel thread ti stanno già rispondendo ed è veramente poco carino abbandonare una discussione e chi ti stava aiutando, per venire di qua a porre la stessa domanda … ::slight_smile:

Poi, NON avendolo tu ancora fatto, ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto :wink:) e di leggere con MOLTA attenzione il REGOLAMENTO.

Infine, per rispetto verso chi ti stava già aiutando nell'altro thread, questo tuo thread viene chiuso e ti prego di continuare dove avevi cominciato. Grazie.

Guglielmo