Goeie middag vrienden,

Intussen ben ik wat gevorderd in mijn Arduino-"studies". Momenteel heb ik een RTC (DS3231) aangesloten en kan ik de datum + uur printen naar de seriële monitor. MAAR : toen heb ik een standaard LCD (2 x 16) aangesloten via de 4 data-lijnen (dus de gewone verbinding - geen I2C).
Ik dacht : laat ik Arduino de data van de RTC (voorlopig de temperatuur) eens sturen naar de LCD, maar dit lukt niet. Ik krijg enkele Chinese tekens rechts onderaan op de LCD.

Ik weet echt niet wat ik fout doe en info daarover vind ik niet direct. Ik denk : als Arduino de data correct naar de Seriële Monitor kan sturen, dan zou Arduino dit toch ook moeten doen naar de LCD.

Heeft iemand een ideetje wat ik verkeerd doe ?

Dit is mijn code bij mijn Arduino Leonardo waarvan de schets komt van RTC_DS3231 :


// Date and time functions using a DS3231 RTC connected via I2C and Wire lib

#include <LiquidCrystal.h>               //load lib Liquid Crystal

LiquidCrystal LCD (10, 9, 5, 4, 3, 2);   //define the 6 pins of the LCD

#include "RTClib.h"
RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"};

void setup () {
  Serial.begin(9600);

  LCD.begin (16, 2);    //config the LCD as 16 row/2 colom

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    while (1) delay(10);
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {

  DateTime now = rtc.now();

  Serial.print(now.day(), DEC);     //print nr day
  Serial.print('/');                //print "/"
  Serial.print(now.month(), DEC);   //print nr month
  Serial.print('/');                //print "/"
  Serial.print(now.year(), DEC);    //print nr year
  Serial.print(" - ");              //print " - "
  //Serial.print(" (");
  //Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  //Serial.print(") ");
  Serial.print(now.hour(), DEC);    //print hour
  Serial.print(':');                //print ":"
  Serial.print(now.minute(), DEC);  //print minute
  Serial.print(':');                //print ":"
  Serial.print(now.second(), DEC);  //print second
  Serial.println();                 //new line

  Serial.print("Temperature: ");       //print "txt"
  Serial.print(rtc.getTemperature());  //print - temperature -
  Serial.println(" C");                //print "txt"

  Serial.println();                    //print new line

  delay (500);

  LCD.clear();
  LCD.setCursor (0, 0);             //set cursor on colom zero and row zero

  LCD.print("Temp: ");              //transmit "txt" to LCD
  LCD.print(rtc.getTemperature());  //transmit -temperature- to LCD
  LCD.println(" C");                //transmit "txt" to LCD + new line

  delay(500);
}

[Bericht gewijzigd door Henry S. op (0%)]

Werkt het LCD example wel?

Zijn de pinnen wel juist gedeclareerd?Geen pinnen verwisseld?

Goeie middag Aart en Mel,
Ja hoor, de LCD die ik aangesloten heb, was al aangesloten aan de Arduino met een Ultrasoon sensor HC-SR04 en dit werkte perfect. Ik heb enkel de US sensor vervangen door de RTC.

Ik zie ook dat ik mijn code op een niet correcte manier gekopieerd heb in dit topic.

Jan.

Een breadbordje is vaak tricky. Niet altijd zijn de contacten even goed. Draadjes eens uittrekken en terug steken kan al eens helpen. Bij de LCD matrix schermen vind ik de RS232 versies toch net wat handiger. Je hebt dan ook maar 3 aansluitingen nodig.

Je hebt 3 control-lijnen aangesloten op het breadboard (RS/RW/E), en maar 2 daarvan staan in de configuratie bij LiquidCrystal.

Dat is verdacht, maar hoeft niet fout te zijn. Maar RW moet wel laag zijn als je die in de software niet gebruikt.

Goeie middag,
@buckfast_beekeeper : de LCD werkte goed met de US sensor. Ik heb zopas alle draadjes los- en terug gestoken - zelfde resultaat.

@deKees : ja hoor, RS=gele draad naar pin 10 Arduino / RW= witte draag naar massa (rood en wit gebruik ik steeds voor massa en V+) / E=groene draad naar pin 9 Arduino.

Zou het kunnen dat er ergens in Arduino één of ander register deze Chinese tekens doorstuurt ipv de data ?

Dank voor de reacties,
Jan.

Eerst weer even een example aan de praat helpen en dan verder zoeken.

Dag vrienden,

Eerst een kleine mededeling: ik heb de RTC losgekoppeld en uit de Arduino-voorbeelden (LiquidCrystal --> Hello World) geprobeerd. Dit werkt perfect.

Dan heb ik het andere voorbeeld (LiquidCrystal--> SerialDisplay) geprobeerd en krijg ik de tekst vanuit de seriële monitor op het LCD, maar steeds gevolgd door een Chinees teken. Als ik een lege inhoud verstuur vanuit de seriële monitor, krijg ik ook het Chinese teken (als enige teken) op het display.

Alle verbindingen zijn goed, de LCD lijkt mij goed te zijn,... Bizar.

Jan.

Je drukt op Enter aan het eind van de regel in je seriele monitor? Dan krijg je een ASCII 10 of 13 mee en dat is een vreemd teken op je LCD

Als ik het mij goed herinner zit je dan in de 'user defined characters' (de eerste 16 tekens, eigenlijk de eerste 8 maar de volgende 8 zijn hetzelfde)

[Bericht gewijzigd door KGE op (36%)]

dit is de karakterset

De eerste 16 zijn dus de (2x) 8 user definable characters.
Heb je die niet gevuld staan er meestal random bits in.

Goeie avond KGE,
Dank voor de info.
Bij de tweede schets (de LiquidCrystal--> SerialDisplay) druk ik op "Verzenden". IK heb "Enter" geprobeerd en zowel bij Verzenden als bij Enter verschijnt het Chinese teken.
Dit teken vind ik ook niet terug in de karakterset. Ik vind de karakters op de LCD van mijn RTC-schets (vanop de foto die ik eerst heb gestuurd vandaag om 16:05:59) dan wel weer terug in de karakterset :

(high) - (low)
- 1101-1100
- 1110-1101
- 1110-1101
- 1111-1100

Als ik de schets - de SerialDisplay - inlaad in Arduino, dan is de LCD volledig clean. Pas als ik een tekst of zelfs een lege inhoud via de seriële monitor verstuur, verschijnt het teken.

Bij de andere schets - de HelloWorld - loopt alles perfect.

En bij mijn RTC-schets lees ik de data van de RTC op de seriële monitor perfect, maar niet op de LCD. Daar zijn dan die 4 karakters te zien.

Dus ik vermoed niet dat er een bedradingsfout is, maar ik moet ergens een foutje gemaakt hebben of misschien zit er wat data in één of ander register ???
Nogmaals : bizar en hoogst eigenaardig...

Jan

Wijzig

LCD.print(rtc.getTemperature());

eens door

LCD.print((String)rtc.getTemperature());

Kent de LCD librarie een println()? Een println wordt normaal ook afgesloten met een ASCII 13 of CR (carriage return). Is hetzelfde als een enter.

[Bericht gewijzigd door buckfast_beekeeper op (26%)]

Goeie avond,

Beste buckfast_beekeeper. Dank voor je info. Heb ik geprobeerd - echter zonder resultaat.

Ik bemerk dat jullie programma's of delen ervan in een blauw veldje plaatsen. Mag ik je beleefd vragen hoe ik dit moet doen ?
Dank
Jan.

Om code correct/leesbaar te kunnen posten zijn er code-tags beschikbaar: https://www.circuitsonline.net/forum/faq/2#code_tag
Arduino staat er niet in als optie, maar c voldoet.

Ik heb je code in de startpost ook code-tags gegeven.

Maak er eens eerst een string van

String test = (String)rtc.getTemperature();
LCD.print(test);

Je kan dezelfde string dan ook naar je seriële poort sturen.

Probeer eens ipv

LCD.print(rtc.getTemperature());

LCD.write(rtc.getTemperature());

Op 30 april 2022 21:52:32 schreef Christine:
Bij de tweede schets (de LiquidCrystal--> SerialDisplay) druk ik op "Verzenden". IK heb "Enter" geprobeerd en zowel bij Verzenden als bij Enter verschijnt het Chinese teken.

Ja, verzenden geeft een 'Enter' (10 of 13) mee met de ingetypte tekst in de Arduino seriële monitor.

Dit teken vind ik ook niet terug in de karakterset.

Klopt, het is één van de tekens die je zelf kunt definieren in de LCD (codes 0 tot 15)

Ik vind de karakters op de LCD van mijn RTC-schets (vanop de foto die ik eerst heb gestuurd vandaag om 16:05:59) dan wel weer terug in de karakterset :

Daaruit blijkt dat LCD.print blijkbaar niet de juiste tekens stuurt. Ik vermoed dat het mis gaat bij de regel

LCD.print(rtc.getTemperature()); 

Wanneer je die regel weg laat verschijnt er dan wel 'TempC' op het display ?

Probeer in kleine stappen te ontdekken waar het mis gaat.