Arduino Forum

International => Italiano => Generale => Topic started by: aquilacieca on Feb 22, 2019, 02:23 pm

Title: Strani simboli su display lcd
Post by: aquilacieca on Feb 22, 2019, 02:23 pm
buongiorno a tutti,
non apro un altro thread dato che ce ne sono diversi.
in allegato trovate il mio display, nelle versioni di lunedi ieri e oggi(nel modulo non era collegato un cavo, non fateci caso, lo stavo sostituendo).
Ha iniziato a dare valori strani da ieri. Ho provato con 2 moduli diversi i2c; ho sostituito tutti i fili con fili nuovi. vi riporto il codice, uso IDE 1.8.8 per mac.

Code: [Select]

#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Time.h>
#include <TimeLib.h>
#include <DHT.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);
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
DS3231  rtc(A4, A5);

// Init a Time-data structure
Time  ti;

int relay_luci = 3; // PIN DEL RELè LUCE
int relayVentolaEntrata = 9;
int relayVentolaUscita= 10;
int relay_calore = 8; //calore
//Setup light cycle for both bars
const int OraAccensione = 8;     //all lights on
const int OraSpegnimento = 20 ;    //all ights off




void setup() {
 //assign
   
  Serial.begin(9600);
 
  rtc.begin();
  //The following lines can be uncommented to set the date and time
  //rtc.setDOW(TUESDAY);     
  //rtc.getTime();     
  //rtc.setDate(1, 15, 2019);
  ti = rtc.getTime();
 
Serial.print("Time ");
Serial.print(ti.hour);
Serial.print(":");
Serial.print(ti.min);
Serial.print(" and ");
Serial.println(ti.sec);


lcd.begin(16,2);
lcd.backlight();

 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()
{{
float h = dht.readHumidity();
float t = dht.readTemperature();
// posiziono il cursore alla colonna 5 e riga 0
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(5, 0);   
lcd.print(t);
lcd.setCursor(10, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hu:");
lcd.setCursor(3, 1);
lcd.print(h);
lcd.setCursor(8, 1);
lcd.print("%");


if (t < 20,1)
{
  digitalWrite(relay_calore, HIGH);
 
  delay(10);
}
else if
(t > 26){
digitalWrite(relayVentolaEntrata, HIGH);
digitalWrite(relayVentolaUscita, HIGH);
digitalWrite(relay_calore, LOW);
}
  else {
  digitalWrite(relayVentolaEntrata, LOW);
  digitalWrite(relayVentolaUscita, LOW);
  digitalWrite(relay_calore, LOW);}


}

//Get time data from RTC and store in ti
//Luce
 if (ti.hour >= OraAccensione && ti.hour < OraSpegnimento){
    digitalWrite(relay_luci, HIGH);
  } 
   else if (ti.hour >= OraSpegnimento || ti.hour < OraAccensione){
    digitalWrite(relay_luci, LOW);
  }
  }

Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 22, 2019, 02:30 pm
mancava lunedi
Title: Re: Strani simboli su display lcd
Post by: ORSO2001 on Feb 22, 2019, 02:59 pm
ciao aquilacieca,

permettimi un paio di osservazioni...non è buona cosa, se non realmente necessario, riscrivere il display ad ogni ciclo loop...aggiornalo solo quando serve e nelle posizioni specifiche.
i decimali si distinguono dalle unità tramite il "." e non tramite "," quindi questo if non va bene:
Code: [Select]
if (t < 20,1)
detto questo...lunghezza dei cavi per l'I2C?
cosa ti arriva come cavi di potenza in quella scatola?...se si tratta del "proibito" sei sicuro che non diano fastidio ai cavi I2C?
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 22, 2019, 03:07 pm
i cavi sono da 20 cm.
in quella scatola ci sono i cavi del dht22, della scheda relè, del rtc. Di esterno c'è il jack dell'alimentatore di arduino, ci sono solo 2 cavi del "proibito" e passano lontano da loro.tutti gli altri cavi sono da 5v o al massimo 12 v delle ventole.
Title: Re: Strani simboli su display lcd
Post by: gpb01 on Feb 22, 2019, 04:05 pm
>aquilacieca: SOLO per questa volta NON ho cancellato tutti i messaggi, ma ho diviso il post ...
... cosa c'è di poco chiaro nel punto 16.9 del REGOLAMENTO (http://forum.arduino.cc/index.php?topic=149082.0) ? ? ? Il thread a cui ti eri collegato era del 2017 !

Per i futuro presta più attenzione, grazie,

Guglielmo
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Feb 22, 2019, 04:46 pm
i cavi sono da 20 cm.
in quella scatola ci sono i cavi del dht22, della scheda relè, del rtc. Di esterno c'è il jack dell'alimentatore di arduino, ci sono solo 2 cavi del "proibito" e passano lontano da loro.tutti gli altri cavi sono da 5v o al massimo 12 v delle ventole.
Ecco, già che sono da 20 cm. sono già fin troppo lunghi! Io ho problemi con un pettine che si inserische nell'I2C del display e che va ad un altro circuito stampato sotto il display...
Già che sei su breadboard diciamo che i contatti non sono propriamente "dorati" e perfetti...
Già che ci sono delle ventole, la cosa mi piace poco.
Già che sei vicino ai cavi di rete mprendi anche i disturbi della lavatrice nell'appartamento del vicino.
Se poi hai una lampada al neon prova pure ad accenderla e spegnerla così sul display hai l'albero di natale tutto disegnato...
...E...WOW!!! c'è anche una scheda relé con chissà che diavolo c'è attaccato !!!
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 22, 2019, 04:52 pm
al relè le ventole e i led cob.
ho capito, mi tengo i disturbi  :(
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Feb 22, 2019, 04:58 pm
al relè le ventole e i led cob.
ho capito, mi tengo i disturbi  :(
Non è una risposta...
Puoi provare a diminuire la lunghezza dei 4 fili I2C?
Poi, sul mio circuito i disturbi che non entrano "via cavo" entrano direttamente sui chip del circuito stampato del display attraverso i relé. Io ho ovviato con dei relè statici triac, tu puoi allontanare il display dal relè e mettere un filtro RC (condensatore 0,1uF in serie a una 47 ohm) in parallelo al contatto.
Poi su un altro post avevamo trovato una soluzione anche per il display, mettendo un condensatore 0,1uF tra pin VSS e pin E e una resistenza da 3.300 ohm tra pin VDD e pin E (sempre lui...)

Come vedi c'è da divertirsi...
Title: Re: Strani simboli su display lcd
Post by: fabpolli on Feb 22, 2019, 05:01 pm
al relè le ventole e i led cob.
ho capito, mi tengo i disturbi  :(
Comincia a non scrivere sul display ad ogni ciclo di loop ma solo quando ti cambia una o più informazioni come ti hanno suggerito nel post #2 ci sono ottime possibilità che se non scompaiono del tutto saranno sicuramente più limitati i problemi, io stesso ho riscontrato in passato display lcd impazziti con caratteri strani, senza toccare i collegamenti ma aggiornando solo quando strettamente necessario ho risolto.
Poi se i caratteri strani dipendono dalle tue cose (software+interferenze) allora devi risolvere sia l'uno che l'altro, ma intanto intervenire sul sofwtare è già un inizio e non comporta modifiche hardware

Edit = Sovrapposto a Steve-cr che ha dato anche ottimi consigli lato hardware
Title: Re: Strani simboli su display lcd
Post by: uwefed on Feb 22, 2019, 08:04 pm
Che valori di resistenze Pullup hai / hai messo su SDA e SCL?
Ciao Uwe
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 22, 2019, 10:39 pm
Non ho messo resistenze  :o
Domani farò le modifiche suggerite
Grazie mille
Title: Re: Strani simboli su display lcd
Post by: uwefed on Feb 23, 2019, 11:15 am
allora metti prima 4,7kOhm e se continua il problema 2,2kOhm Pullup su SDA e SCL.
Ciao Uwe
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 23, 2019, 07:46 pm
inserite le 4,7kOhm pullup come suggerito, le 2,2kOhm non le ho al momento.
allego le foto della situazione. quando carico il codice con usb il monitor impazzisce completamente (foto 1).
stacco l'alimentazione e riattacco, la situazione è come in foto 2 e 3. allego il codice nuovo con le modifiche apportate come suggerito ( il codice è diverso da prima, è la versione con isteresi).
ho provato anche a caricare il codice senza alimentare i relè e senza l'alimentazione "proibita" dei led cob, ma non cambia nulla.
non capisco come mai fino a lunedi era tutto funzionante e ora fa cosi, l'impianto e il codice sono cosi da più di un mese.

grazie

Code: [Select]

#include <DS3231.h>
  #include <LiquidCrystal_I2C.h>
  #include <Wire.h>
  #include <Time.h>
  #include <TimeLib.h>
  #include <DHT.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,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
  DS3231  rtc(SDA, SCL);

  // Init a Time-data structure
  Time  ti;
 
  #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 = 21;    // Spegnimento luci alle 20:59:59

 


void setup()
{

  lcd.begin(16,2);
  lcd.backlight();
  rtc.begin();
  //rtc.setDOW(THURSDAY);     
  //rtc.setTime(19,15,00);     
  //rtc.setDate(24, 1, 2019);
 
   
  lcd.setCursor(0, 1);
  lcd.print("T:");
  lcd.setCursor(7, 1);
  lcd.print("C");
  lcd.setCursor(8, 1);
  lcd.print("Hu:");
  lcd.setCursor(15, 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()
{
  ti = rtc.getTime();

  if (ti.hour >= OraAccensione && ti.hour < 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.setCursor(1, 0);
  lcd.print(rtc.getTimeStr());
  lcd.print(" ");
  lcd.setCursor(2, 1);   
  lcd.print(t);
  lcd.setCursor(10, 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 (ti.hour >= OraSpegnimento || ti.hour < OraAccensione)
{
  digitalWrite(relay_luci, LOW);
  digitalWrite(relay_calore, LOW);
  digitalWrite(relayVentolaEntrata, LOW);
  digitalWrite(relayVentolaUscita, LOW);
 // lcd.clear();
  lcd.noBacklight();
 
}}
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 23, 2019, 08:00 pm
le foto  :)
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Feb 23, 2019, 11:32 pm
Ahh ma la I2C non è APPICCICATA al display!!!
Non se ne parla nemmeno, i collegamenti tra la I2C e il display devono essere il più corti possibili tanto è vero che i display I2C nativi ce l'hanno saldata dietro.
E occhio al collegamento sul piedino E che è quello più "delicato"... probabilmente quel filo non è collegato bene o si è "spostato" quindi riceve più disturbi.

Dalla foto allegata, se fai questo montaggio (la schedina è stata progettata apposta) non dovresti pèiù avere i problemi dei collegamenti lunghi. Ti serve solo un "pettinino" da mettere in mezzo.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 24, 2019, 12:11 am
Ho il display con i piedini dello starter kit di Arduino, come ci attacco la I2C? Devo dissaldare? Forse mi conviene prendere un Display con i2c?  :(
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Feb 24, 2019, 12:14 am
Con meno di cinque euro te la cavi. Poi quando avrai voglia "convertirai" anche quello, perché usarlo così ha poco senso.
QUESTO (https://www.aliexpress.com/item/1PCS-LCD2004-I2C-2004-20x4-2004A-Blue-Green-screen-HD44780-Character-LCD-w-IIC-I2C-Serial/32836063834.html?spm=a2g0s.9042311.0.0.6a214c4dEqgOT3)
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Feb 24, 2019, 08:01 am
Grazie mille, procedo all'acquisto.
 :)
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 04, 2019, 08:25 pm
Montato nuovo display con i2c incluso, purtroppo continuano i simboli strani  :(
Title: Re: Strani simboli su display lcd
Post by: ORSO2001 on Mar 04, 2019, 09:08 pm
ciao,

pui postare il tuo ultimo programma?
te lo chiedo in quanto finora ho sempre visto, nei tuoi programmi, che impostavi l'LCD come 16x2 e quello che stai usando è un 20x4.
Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 04, 2019, 09:17 pm
Scusa la domanda stupida, ma quando parte il tutto, per un po', hai i dati sul display corretti?
Ho guardato un po' immagini e codice postato e non mi tornano alcune cose, ad es. sul primo post hai postato la situazione di 3 giorni, in alcuni i dati erano allineati a sinistra in altri a destra, se guardo il codice non ritrovo i caratteri costanti del codice, come se tu mostrassi un codice diverso da quello eseguito.
Sul codice metti "Temp" e sul display esce solo T.
Sul setup formatti in un modo nel loop in un altro.
Ho l'impressione che tu possa avere più problemi accavallati.

Io ripartirei dall'inizio facendo un'analisi ordinata del problema, se ti va.
Quindi partirei da un codice stabile e da immagini del risultato coerenti con il codice, indicando dopo quanto si sballa tutto.

Sospetto due problemi, il primo sono disturbi sui cavi, l'altro sono errori di visualizzazione dei dati sul display derivanti dal codice, vedo che aggiorni solo alcuni pezzi e in modo differente tra setup e loop, ma non avendo trovato coerenza tra codice e immagini non posso esserne sicuro.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 04, 2019, 10:07 pm
il codice che gira attualmente è questo:

Code: [Select]
#include <DS3231.h>
  #include <LiquidCrystal_I2C.h>
  #include <Wire.h>
  #include <Time.h>
  #include <TimeLib.h>
  #include <DHT.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);
  DS3231  rtc(SDA, SCL);
 
  Time  ti;
 
  #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 = 21;    // Spegnimento luci alle 20:59:59


void setup()
{

  lcd.begin(20,4);
  rtc.begin();
  //rtc.setDOW(THURSDAY);     
  //rtc.setTime(19,15,00);     
  //rtc.setDate(24, 1, 2019);   
  lcd.setCursor(0, 1);
  lcd.print("T:");
  lcd.setCursor(8, 1);
  lcd.print("Hu:");
  lcd.setCursor(15, 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()
{
 
    //Bar 1
  if (ti.hour >= OraAccensione && ti.hour < 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(1, 0);
  lcd.print(rtc.getTimeStr());
  lcd.print("");
  lcd.setCursor(2, 1);   
  lcd.print(t);
  //lcd.setCursor(7, 1);
  //lcd.print("C");
  lcd.setCursor(10, 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 (ti.hour >= OraSpegnimento || ti.hour < OraAccensione)
{
  digitalWrite(relay_luci, LOW);
  digitalWrite(relay_calore, LOW);
  digitalWrite(relayVentolaEntrata, LOW);
  digitalWrite(relayVentolaUscita, LOW);
 // lcd.clear();
  lcd.noBacklight();
 
}}



il display non mostra mai i dati correttamente, già dall'avvio inizia a dare simboli strani.
Domani ricomincio con un codice stabile, magari qualche esempio, per cercare di capire da dove nasce il problema.

grazie a tutti
Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 04, 2019, 10:32 pm
Posso suggerirti un piccolo test?
Nel setup, dopo
Code: [Select]

  lcd.begin(20,4);

prova a metterci
Code: [Select]

  delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("01234567890123456789");
  lcd.setCursor(0, 1);
  lcd.print("ABCDEFGHIJKLMNOPQRST");
  lcd.setCursor(0, 2);
  lcd.print("abcdefghijklmnopqrst");
  lcd.setCursor(0, 3);
  lcd.print("01234567890123456789");
  delay(2000);

prima di
Code: [Select]

  rtc.begin();

Per vedere se almeno all'avvio stampa qualcosa di corretto.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 05, 2019, 09:24 am
Posso suggerirti un piccolo test? ....
Grazie del consiglio, stasera proverò

--- Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce. Gli utenti da device "mobile" ringrazieranno per la cortesia ;) -gpb01
Title: Re: Strani simboli su display lcd
Post by: Datman on Mar 05, 2019, 01:16 pm
La risposta l'avevamo già letta: non era necessario copiarla.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 05, 2019, 09:11 pm
Posso suggerirti un piccolo test?
ho provato il codice suggerito ma niente da fare, il display si è inchiodato.
ho tolto il codice suggerito e ripristinato il codice originale e ora il monitor da simboli strani e basta.vedi foto.
non vedo più nemmeno l'orario , la temperatura e l'umidità.
ho provato alcuni esempi tipo hello word ed altri e funzionano tranquillamente senza nessun simbolo strano.
ora quindi oltre ai simboli strani arduino non riconosce più rtc. :smiley-confuse:  :smiley-confuse:  :smiley-confuse:
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Mar 05, 2019, 10:11 pm
Ogni tanto mi vengono dei dubbi:
tu sai, vero, che l'unico modo per resettare il display (putroppo) è quello di spegnerlo e riaccenderlo e puoi resettare tutte le volte che vuoi Arduino, ma non cambia nulla se non lo spegni ?
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 05, 2019, 10:19 pm
Ogni tanto mi vengono dei dubbi:

grazie ma lo sapevo
Title: Re: Strani simboli su display lcd
Post by: Standardoil on Mar 06, 2019, 07:09 am
Ma dove sei andato a prendere la libreria DS3231?
a me qualla del gestore librerie mi da errore:
Code: [Select]

error: 'class DS3231' has no member named 'getTimeStr'

comunque il tuo programma è
-male indentato
-include due librerie DHT
-ha piu' statement sulla stessa riga
-ha commenti (nella parte display) che NON si riferiscono all'azione che compiono
-fa dei test su un oggetto tempo 'ti' che non aggiorni mai
insomma è scritto molto ma molto male
tu dirai che nessuna di queste cose centra col tuo problema...
io ti risponderei che se la cura del tuo cablaggio è simile alla cura della tua programmazione è un miracolo che tu non abbia ancora fatto fumo....
e poi non è che le tue descrizioni siano chiare chiare
con gli esempi base il display va? rispondi solo SI'/NO e cita QUALE esempio hai usato
esiste una regola semplice:
gli incendi si spengono un albero per volta
cosa vuol dire?
comincia a isolare un solo problema e trovarne la soluzione
Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 06, 2019, 09:33 am
ho provato il codice suggerito ma niente da fare, il display si è inchiodato...
Riesci a descrivermi, come si fa con un bambino, esattamente come fai questi test?
Usi lo stesso dispositivo o fai i test su altri dispositivi?
Lo stacchi tutte le volte dall'alimentazione? e dal cavo usb con cui lo programmi? e da tutti i dispositivi collegati?
Cioè una sorta di guida passo passo per permetterci di riprodurre esattamente tutti i tuoi passaggi per cercare di ottenere lo stesso tuo risultato.

Poi, quando dici "inchiodato" cosa intendi esattamente? perchè io mi immagino di vedere tondini di ferro a testa piatta uscire dagli angoli del display ;)
Magari quello che vedi è l'esatto comportamento richiesto dal programma, senza una descrizione precisa di cosa accade, per noi, è difficile se non impossibile da capire.

Mi verrebbe da proporti di staccare tutto tranne il display e provare solo il setup che ti ho suggerito e vedere cosa succede.
E poi di riattaccare un pezzo alla volta e sbatterci la testa finchè non funziona prima di passare al successivo.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 11:24 am
Riesci a descrivermi, come si fa con un bambino, esattamente come fai questi test?
buongiorno, provo a rispondere a tutte le tue domande:
Usi lo stesso dispositivo o fai i test su altri dispositivi?
uso lo stesso dispositivo, non ne ho altri al momento.

Lo stacchi tutte le volte dall'alimentazione? e dal cavo usb con cui lo programmi? e da tutti i dispositivi collegati?
l'ho staccato dall'alimentazione  e l'ho staccato dal cavo usb. la prima volta non ho staccato tutti gli altri dispositivi collegati (scheda relè  e dht); nelle prove successive li ho staccati.

Poi, quando dici "inchiodato" cosa intendi esattamente? perchè io mi immagino di vedere tondini di ferro a testa piatta uscire dagli angoli del display ;)
eheh, per inchiodato ti allego la foto. il display è rimasto fisso all'ultimo istante prima di caricare il nuovo codice.


Ma dove sei andato a prendere la libreria DS3231?
a me qualla del gestore librerie mi da errore:
questa è la libreria: http://www.rinkydinkelectronics.com/library.php?id=73

con gli esempi base il display va? rispondi solo SI'/NO.
Si va

e cita QUALE esempio hai usato
ho testato uno degli esempi della libreria, per l'esattezza questo: "HelloWord_i2c"

grazie a tutti per i suggerimenti, stasera cerco di sistemare e affrontare un problema alla volta.
Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 06, 2019, 11:55 am
Quindi, tornando al mio codice di test, staccando tutto e riattaccando (quindi partendo da un avvio pulito senza strascichi di vario tipo), all'avvio, nell'esecuzione del setup non stampa correttamente manco una volta, manco per sbaglio i valori di esempio che ho suggerito?

cioè un setup fatto così:

Code: [Select]

void setup() {
  lcd.begin(20,4);
  delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("01234567890123456789");
  lcd.setCursor(0, 1);
  lcd.print("ABCDEFGHIJKLMNOPQRST");
  lcd.setCursor(0, 2);
  lcd.print("abcdefghijklmnopqrst");
  lcd.setCursor(0, 3);
  lcd.print("01234567890123456789");
  delay(2000);
}


Ancora non funziona?

Prova anche a ripulire un po' questa parte perchè hai incorporato di tutto e di più e anche un po' a caso probabilmente.

Code: [Select]

  #include <DS3231.h>
  #include <LiquidCrystal_I2C.h>
  #include <Wire.h>
  #include <Time.h>
  #include <TimeLib.h>
  #include <DHT.h>
  #include "DHT.h"
...
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 12:10 pm
cioè un setup fatto così:
Ancora non funziona?
no, ieri sera non ha funzionato, bloccandosi all'immagine che ho allegato al precedente post.
ricaricando poi il codice che girava da un mese non scrive piu nulla sul display, solo simboli strani.
stasera stacco tutto, carico solo il tuo codice e vediamo cosa succede, poi un pezzo alla volta ricollego il resto, ripulendo il codice.

grazie ancora
Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 06, 2019, 12:37 pm
Quando fai queste prove le fai tenendo tutto inscatolato oppure porti fuori tutto e colleghi passando ad es. per una breadboard?

Perchè se ogni volta che tocchi qualcosa fisicamente, hai effetti diversi, il problema è sicuramente elettrico, magari quando tocchi sposti qualche cavo che capta disturbi diversi.

Se riesci, prova su banco, cioè fuori dalla scatola per evitare o quantomeno ridurre al minimo i problemi di disturbi.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 12:55 pm
Quando fai queste prove le fai tenendo tutto inscatolato oppure porti fuori tutto e colleghi passando ad es. per
le prove le ho fatte lasciando arduino nella scatola del progetto in cui si trova. stasera lo tiro fuori e tramite breadboard faccio i test uno ad uno. grazie ancora.

quello che non capisco è perché dai primi di gennaio (inizio del progetto) fino a 10 gg fa è filato tutto liscio e poi da un giorno all'altro sono iniziati i disturbi, non ho aggiunto nulla, solo implementato il codice.

Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 06, 2019, 01:18 pm
Secondo me hai due problemi accavallati, lo dico a intuito, uno software e uno hardware.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 01:40 pm
software e uno hardware.
Per il software cerco di risolvere come mi avete suggerito.
Per l'hardware i problemi credi siano le interferenze? Cavi inadatti? O cosa?
Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 06, 2019, 01:47 pm
si, qualcosa del genere, però se affronti un problema alla volta poi si semplifica tutto.
Io inizierei con il sistemare il software in modo che funzioni correttamente sul banco e poi se non mantiene il comportamento atteso dopo averlo inscatolato si valuta anche la parte hardware ma con un po' più di certezze sulle spalle.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 01:53 pm
si, qualcosa del genere
Grazie mille ancora.... Stasera smonto e inizio a pulire e testare il software....
Title: Re: Strani simboli su display lcd
Post by: Datman on Mar 06, 2019, 03:44 pm
Non puoi cominciare riportando il software a come era 10 giorni fa?
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 03:56 pm
Non puoi cominciare riportando il software a come era 10 giorni fa?
L'ho fatto ieri, le sere precedenti e anche 10 giorni fa quando ha iniziato a dare i valori strani. L'unico codice che ho visualizzato correttamente è stato HelloWord_i2c... Tutti gli altri codici mi davano valori strani
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 10:40 pm
eccomi,
ho testato il codice di maubarzi e funziona, vedi foto. funziona anche l'esempio helloword, vedi foto.
ho poi testato l'rtc da solo e nel seriale ho dei simboli strani.
che sia tutta colpa sua?  :)
sotto il codice usato:

Code: [Select]
// DS3231_Temperature
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my DS3231-library to
// quickly send the current temperature over a serial link
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// DS3231:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//          SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// DS3231:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//          SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the
// hardware I2C interfaces.
//
// You can connect the DS3231 to any available pin but if you use any
// other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

void setup()
{
  // Setup Serial connection
  Serial.begin(115200);
  // Uncomment the next line if you are using an Arduino Leonardo
  //while (!Serial) {}

  // Initialize the rtc object
  rtc.begin();
}

void loop()
{
  // Send current temperature
  Serial.print("Temperature: ");
  Serial.print(rtc.getTemp());
  Serial.println(" C");
  delay (1000);
}
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 10:50 pm
eccomi,

come non detto, provando l'esempio di seguito l'rtc nel seriale riporta correttamente.



Code: [Select]

// Arduino DS3232RTC Library
// https://github.com/JChristensen/DS3232RTC
//
// Example sketch illustrating Time library with Real Time Clock.
// This example is identical to the example provided with the Time Library,
// only the #include statement has been changed to include the DS3232RTC library.

#include <DS3232RTC.h>      // https://github.com/JChristensen/DS3232RTC

void setup()
{
    Serial.begin(9600);
    setSyncProvider(RTC.get);   // the function to get the time from the RTC
    if(timeStatus() != timeSet)
        Serial.println("Unable to sync with the RTC");
    else
        Serial.println("RTC has set the system time");
}

void loop()
{
    digitalClockDisplay();
    delay(1000);
}

void digitalClockDisplay()
{
    // digital clock display of the time
    Serial.print(hour());
    printDigits(minute());
    printDigits(second());
    Serial.print(' ');
    Serial.print(day());
    Serial.print(' ');
    Serial.print(month());
    Serial.print(' ');
    Serial.print(year());
    Serial.println();
}

void printDigits(int digits)
{
    // utility function for digital clock display: prints preceding colon and leading 0
    Serial.print(':');
    if(digits < 10)
        Serial.print('0');
    Serial.print(digits);
}

Title: Re: Strani simboli su display lcd
Post by: maubarzi on Mar 06, 2019, 10:58 pm
forse il problema sul seriale deriva da una diversa velocità impostata.
Ho trovato questo
Serial.begin(115200);
Se le velocità impostate non sono corrette ottieni i caratteri strani che hai riportato.

Ora, il display funziona, l'rtc funziona
puoi provare ad inserire un pezzo alla volta tutto quello che ti serve in un singolo sketch testando il risultato prima di passare al pezzo successivo.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 06, 2019, 11:09 pm
Ora, il display funziona, l'rtc funziona

sto inserendo un pezzo alla volta, seguono aggiornamenti.
grazie ancora
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 07, 2019, 12:26 am
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:
Title: Re: Strani simboli su display lcd
Post by: Standardoil on Mar 07, 2019, 07:04 am
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
Title: Re: Strani simboli su display lcd
Post by: Datman on Mar 07, 2019, 09:36 am
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.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 07, 2019, 09:11 pm
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:
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Mar 08, 2019, 12:27 pm
...
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.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 08, 2019, 02:09 pm
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?
Title: Re: Strani simboli su display lcd
Post by: steve-cr on Mar 08, 2019, 02:41 pm
Puoi arrivare fino a 4k7 nel caso succeda spesso.
Title: Re: Strani simboli su display lcd
Post by: aquilacieca on Mar 11, 2019, 12:03 pm
Puoi arrivare fino a 4k7
grazie mille, risolto.