Go Down

Topic: Strani simboli su display lcd (Read 1 time) previous topic - next topic

aquilacieca

#45
Mar 07, 2019, 12:26 am Last Edit: Mar 07, 2019, 12:28 am by aquilacieca
sto modificando il codice originale sempre sul banco. eccolo:
Code: [Select]

  #include <DS3232RTC.h>
  #include <LiquidCrystal_I2C.h>
  #include <Wire.h>
  #include <Time.h>
  #include <TimeLib.h>
  #include <DHT.h>
  #define DHTPIN 6 // 6 è il pin di Arduino a cui collego il sensore di temperatura
  #define DHTTYPE DHT22 // dht22 è il tipo di sensore che uso
  DHT dht(DHTPIN, DHTTYPE);
  #define Isteresi 3
  #define TempImpostata 22
  LiquidCrystal_I2C lcd(0x27,20,4);
  DS3232RTC rtc;
  
  time_t myTime;
  
  
  #define PAUSA 600000
  #define DURATA 60000
  unsigned long t1=0;
  byte on=0;
  int relay_luci = 3; // PIN DEL RELè LUCE
  int relayVentolaEntrata = 10;
  int relayVentolaUscita= 9;
  int relay_calore = 8; //calore
  //Setup light cycle for both bars
  const int OraAccensione = 6;     //Accensione luci alle 6:00:00
  const int OraSpegnimento = 23;    // Spegnimento luci alle 20:59:59


void setup()
{
  lcd.init();
  rtc.begin();
  lcd.clear();
  lcd.backlight();
  setTime(19, 54, 00, 06, 3, 2019);   //set the system time to 23h31m30s on 13Feb2009
  lcd.setCursor(0, 1);
  lcd.print("Temp:");
  lcd.setCursor(11, 1);
  lcd.print("Hu:");
  lcd.setCursor(19, 1);
  lcd.print("%");
  
  pinMode(relay_luci, OUTPUT);
  digitalWrite(relay_luci,LOW);

  pinMode(relayVentolaEntrata, OUTPUT);
  digitalWrite(relayVentolaEntrata, LOW);

  pinMode(relayVentolaUscita, OUTPUT);
  digitalWrite(relayVentolaUscita, LOW);

  pinMode(relay_calore, OUTPUT);
  digitalWrite(relay_calore, LOW);

}


void loop()
{
 if (myTime >= OraAccensione && myTime < OraSpegnimento)
{
if
(millis()-t1>PAUSA && on==0)
  {on=1;
  digitalWrite(relayVentolaUscita, HIGH);
  digitalWrite(relayVentolaEntrata, HIGH);
  } // Se è trascorsa la pausa, accende
if
(millis()-t1>PAUSA+DURATA)
  {on=0;
  t1 =millis();
  digitalWrite(relayVentolaUscita, LOW);
  digitalWrite(relayVentolaEntrata, LOW);
  }} // Se è trascorsa anche la durata, spegne e azzera.

 
  digitalWrite(relay_luci, HIGH);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
 //lcd.print(rtc.getDateStr());  
  // posiziono il cursore alla colonna 5 e riga 0
  //lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print (hour());
  lcd.print(":");
  lcd.print(minute());
  lcd.print(":");
  lcd.print(second());
  lcd.setCursor(10, 0);
  lcd.print(day());
  lcd.setCursor(11, 0);
  lcd.print("/");
  lcd.print(month());
  lcd.setCursor(13, 0);
  lcd.print("/");
  lcd.print(year());
  lcd.setCursor(5, 1);    
  lcd.print(t);
  //lcd.setCursor(7, 1);
  //lcd.print("C");
  lcd.setCursor(14, 1);
  lcd.print(h);

 if (t > TempImpostata)
{
  if (t > TempImpostata + Isteresi)
{
  digitalWrite(relay_calore, LOW);
  //digitalWrite(relayVentolaEntrata, HIGH);
  //digitalWrite(relayVentolaUscita, HIGH);
}
  else
{
  digitalWrite(relay_calore, LOW);
  //digitalWrite(relayVentolaEntrata, LOW);
  //digitalWrite(relayVentolaUscita, LOW);
}  
}
  else
{
  if (t < TempImpostata - Isteresi)
{
  digitalWrite(relay_calore, HIGH);
  //digitalWrite(relayVentolaEntrata, LOW);
  //digitalWrite(relayVentolaUscita, LOW);
}

  else if (myTime >= OraSpegnimento || myTime < OraAccensione)
{
  digitalWrite(relay_luci, LOW);
  digitalWrite(relay_calore, LOW);
  digitalWrite(relayVentolaEntrata, LOW);
  digitalWrite(relayVentolaUscita, LOW);
 // lcd.clear();
  //lcd.noBacklight();
}}}


purtroppo se tolgo le // all'ultima riga del codice
Code: [Select]

//lcd.noBacklight();

 
il display si spegne dopo una frazione di secondo. come se non riconoscesse l'orario di accensione e spegnimento.
al momento comunque sembrerebbero risolti i problemi dei simboli strani.
domani provo a riportare tutto nello scatolato.

buonanotte :smiley-sleep:

Standardoil

#46
Mar 07, 2019, 07:04 am Last Edit: Mar 07, 2019, 07:07 am by Standardoil
Noto ancora un paio di cose strane, ma siamo sulla strada giusta
1) Continui ad avere commenti che dicono una cosa e azioni che ne fanno un'altra
Code: [Select]

 setTime(19, 54, 00, 06, 3, 2019);   //set the system time to 23h31m30s on 13Feb2009

che poi anche impostare il tempo tutte le volte non è che sia grande idea, lo RTC servirebbe per NON farlo...
interessante qui:
Code: [Select]

 if (myTime >= OraAccensione && myTime < OraSpegnimento)
    {
        if (millis() - t1 > PAUSA && on == 0)
        {
            on = 1;
            digitalWrite(relayVentolaUscita, HIGH);
            digitalWrite(relayVentolaEntrata, HIGH);
        } // Se è trascorsa la pausa, accende

        if (millis() - t1 > PAUSA + DURATA)
        {
            on = 0;
            t1 = millis();
            digitalWrite(relayVentolaUscita, LOW);
            digitalWrite(relayVentolaEntrata, LOW);
        }
    } // Se è trascorsa anche la durata, spegne e azzera.


a parte che se avessi un RTC non demanderei a millis() la gestione delle pause, ma ammetto che per semplicità ci starebbe, non è grande male
ma la prima if?
ti rendi conto che fai un test su un oggetto che NON aggiorni mai?
myTime è dichiarato, ma non è mai aggiornato, come pretenderesti che vada?
non parliamo poi della variabile byte 'on', che sarebbe parola riservata, infatti te la indica in arancione, chissa' cosa significa....
e poi di nuovo fai un test su mytime, che continua a non essere un orario valido
il fatto "strano" è che in sede di stampa ore minuti secondi, mese ed anno li usi correttamente, capirai che questo mi alimenta il dubbio su come stai scrivendo il tuo programma?
quindi, prova a pensare un attimo alla "logica" del programma, che a ma sembra molto zoppicante
qualche perplessità mi viene anche dal fatto che hai mezzo stravolto il programma per ripetere gli stessi errori della volta precedente...
io se devo riscrivere e so di aver sbagliato, per prima cosa elimino l'errore; capisci che mi viene il dubbio che tu non abbia ben capito cosa devi fare e stai "buttando dentro" righe di codice un po' alla carlona?
in sostanza:
piu' analisi, piu' pensiero e meno tastiera
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Datman

#47
Mar 07, 2019, 09:36 am Last Edit: Mar 07, 2019, 09:39 am by Datman
Inoltre, se l'ora di spegnimento è dopo la mezzanotte, l'if non funziona più, perché è minore dell'ora di accensione. Per risolvere il problema, devi fare:
Code: [Select]
int OS;
if (OraAccensione<OraSpegnimento) {OS=OraSpegnimento;}
else {OS=OraSpegnimento+24;}

e poi usi OS per l'if.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

aquilacieca

Grazie a tutti per l'assistenza e il supporto.
Ho corretto il codice, provato su banco ed era ok. Rimontato tutto nello scatolato e tutto ok, nessun simbolo strano.
Risolto.

Ps: il dht22 ora scrive "nan" invece della temperatura e dell'umidità. Cercherò di risolvere  :smiley-confuse:

steve-cr

...
Ps: il dht22 ora scrive "nan" invece della temperatura e dell'umidità. Cercherò di risolvere  :smiley-confuse:
Succede che il DHT scrive "nan" quando la lettura non è corretta, magari dusturbi elettrici transitori (hai acceso un neon o hai attaccato/staccato il cavo USB o stai usando il Black & Decker...) e diciamo che ogni tanto è anche "normale", ma deve essere "ogni tanto tanto...".
Se dovesse farlo troppe volte devi pensare a modificare la connessione o la resistenza di pull-up o vedere da dove entrano questi problemi.
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

aquilacieca

Succede che il DHT scrive "nan"
i disturbi danno fastidio al cavo DATA oppure anche al VCC e GND?
al momento uso una resistenza Pullup da 10K. nel caso con cosa dovrei sostituirla?

steve-cr

Puoi arrivare fino a 4k7 nel caso succeda spesso.
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

aquilacieca


Go Up