Go Down

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

aquilacieca

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?  :(

steve-cr

#16
Feb 24, 2019, 12:14 am Last Edit: Feb 24, 2019, 12:16 am by steve-cr
Con meno di cinque euro te la cavi. Poi quando avrai voglia "convertirai" anche quello, perché usarlo così ha poco senso.
QUESTO
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

aquilacieca

Grazie mille, procedo all'acquisto.
 :)

aquilacieca

Montato nuovo display con i2c incluso, purtroppo continuano i simboli strani  :(

ORSO2001

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.

maubarzi

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.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

aquilacieca

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

maubarzi

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.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

aquilacieca

#23
Mar 05, 2019, 09:24 am Last Edit: Mar 05, 2019, 03:11 pm by gpb01
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

Datman

La risposta l'avevamo già letta: non era necessario copiarla.
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

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:

steve-cr

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 ?
Samantha Cristoforetti: "Mi fai fare un giro sul tuo ultraleggero?". "Certamente, però piloto io !"

aquilacieca


Standardoil

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
Prima legge di Nelson (che sono io): A parità di risultato maggiore è il pensiero, minore il lavoro. Quindi prima di fare pensa!
Non si da retta a studenti: andate a copiare da un'altra parte...
Lo hai visto su Youtube? -> lo chiedi su Youtube

maubarzi

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.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Go Up