Foute uitvoer op LCD (met RTC)

algemene C code
Berichten: 15
Geregistreerd: 20 Okt 2020, 11:40

Foute uitvoer op LCD (met RTC)

Berichtdoor Who2020 » 14 Jan 2021, 18:50

Hallo kenners,

Ik ben een beetje aan het stoeien met een LCD (16x2) met een I2C bordje daarop + een RTC module.
Ik heb de I2C_Clock_with_RTC sketch geupload naar een Uno maar krijg vreemde uitvoer op het LCD.
Als ik in de Serieele monitor de "u" ingeef wordt netjes gevraagd naar de invoer (jaar, maand, datum. uur, minuten en secondes), daarna wordt keurig gemeld dat de RTC is geupdate.
Tijdens de invoer staat op het LCD "Edit mode...", helemaal volgens de sketch.

Ik krijg echter na de invoer op het LCD:
Op regel 1: 165--2165 SAT
Op regel 2: 153:165:85 PM

Wat gaat er fout in de sketch?

De sketch:
======
#include <Wire.h> // for I2C communication
#include <LiquidCrystal_I2C.h> // for LCD
#include <RTClib.h> // for RTC

LiquidCrystal_I2C lcd(0x27, 16, 2); // create LCD with I2C address 0x27, 16 characters per line, 2 lines
RTC_DS3231 rtc; // create rtc for the DS3231 RTC module, address is fixed at 0x68
/*
function to update RTC time using user input
*/
void updateRTC()
{

lcd.clear(); // clear LCD display
lcd.setCursor(0, 0);
lcd.print("Edit Mode...");

// ask user to enter new date and time
const char txt[6][15] = { "year [4-digit]", "month [1~12]", "day [1~31]",
"hours [0~23]", "minutes [0~59]", "seconds [0~59]"
};
String str = "";
long newDate[6];

while (Serial.available()) {
Serial.read(); // clear serial buffer
}

for (int i = 0; i < 6; i++) {

Serial.print("Enter ");
Serial.print(txt[i]);
Serial.print(": ");

while (!Serial.available()) {
; // wait for user input
}

str = Serial.readString(); // read user input
newDate[i] = str.toInt(); // convert user input to number and save to array

Serial.println(newDate[i]); // show user input
}

// update RTC
rtc.adjust(DateTime(newDate[0], newDate[1], newDate[2], newDate[3], newDate[4], newDate[5]));
Serial.println("RTC Updated!");
}
/*
function to update LCD text
*/
void updateLCD()
{

/*
create array to convert digit days to words:

0 = Sunday | 4 = Thursday
1 = Monday | 5 = Friday
2 = Tuesday | 6 = Saturday
3 = Wednesday |
*/
const char dayInWords[7][4] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};

/*
create array to convert digit months to words:

0 = [no use] |
1 = January | 6 = June
2 = February | 7 = July
3 = March | 8 = August
4 = April | 9 = September
5 = May | 10 = October
6 = June | 11 = November
7 = July | 12 = December
*/
const char monthInWords[13][4] = {" ", "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"
};

// get time and date from RTC and save in variables
DateTime rtcTime = rtc.now();

int ss = rtcTime.second();
int mm = rtcTime.minute();
int hh = rtcTime.twelveHour();
int DD = rtcTime.dayOfTheWeek();
int dd = rtcTime.day();
int MM = rtcTime.month();
int yyyy = rtcTime.year();

// move LCD cursor to upper-left position
lcd.setCursor(0, 0);

// print date in dd-MMM-yyyy format and day of week
if (dd < 10) lcd.print("0"); // add preceeding '0' if number is less than 10
lcd.print(dd);
lcd.print("-");
lcd.print(monthInWords[MM]);
lcd.print("-");
lcd.print(yyyy);

lcd.print(" ");
lcd.print(dayInWords[DD]);

// move LCD cursor to lower-left position
lcd.setCursor(0, 1);

// print time in 12H format
if (hh < 10) lcd.print("0");
lcd.print(hh);
lcd.print(':');

if (mm < 10) lcd.print("0");
lcd.print(mm);
lcd.print(':');

if (ss < 10) lcd.print("0");
lcd.print(ss);

if (rtcTime.isPM()) lcd.print(" PM"); // print AM/PM indication
else lcd.print(" AM");
}
void setup()
{
Serial.begin(9600); // initialize serial

lcd.init(); // initialize lcd
lcd.backlight(); // switch-on lcd backlight

rtc.begin(); // initialize rtc
}
void loop()
{
updateLCD(); // update LCD text

if (Serial.available()) {
char input = Serial.read();
if (input == 'u') updateRTC(); // update RTC time
}
}
=====

Ik hoor graag van jullie,
Mvg, Willem.

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor shooter » 14 Jan 2021, 20:57

die lcdupdate staat boven allerlei initialisatie, dus zet dat eerst eens goed dan kunnen we verder kijken en je bent "" vergeten bij de teksten
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 20 Okt 2020, 11:40

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor Who2020 » 15 Jan 2021, 16:46

Paul,

Bij b.v. :

// print date in dd-MMM-yyyy format and day of week
if (dd < 10) lcd.print("0"); // add preceeding '0' if number is less than 10
lcd.print(dd);
lcd.print("-");
lcd.print(monthInWords[MM]);
lcd.print("-");
lcd.print(yyyy);

hoeven er toch geen "" om dd enz. te staan of wel?

Ik begrijp niet goed wat je bedoeld met het goed zetten van de lcd update, kan je me dat wat gedetailleerder uitleggen?

Mvg, Willem.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor shooter » 15 Jan 2021, 20:08

in jouw listing gaat telkens als hij een lcd update doet ook van alles initialiseren, maar dat kan ook voor de setup eenmalig want dat verandert niet.
nee bij een getal niet maar bij een tekst dus wel
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 20 Okt 2020, 11:40

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor Who2020 » 16 Jan 2021, 12:10

Klopt, maar dat zou voor de werking toch niets uitmaken.
Ik zal e.e.a. aanpassen maar denk dat de RTC module defect is (nieuwe is al onderweg).

Mvg, Willem.

Berichten: 15
Geregistreerd: 20 Okt 2020, 11:40

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor Who2020 » 16 Jan 2021, 15:15

Nieuwe RTC module is binnen.
Natuurlijk meteen geprobeerd en de sketch werkt feilloos.
Natuurlijk een gelukkig mens, nu de sketch wat netter maken.

Mvg. Willem

Berichten: 4
Geregistreerd: 22 Feb 2018, 15:51

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor jackentiny » 16 Jan 2022, 01:31

Goedendag,

nieuw hier en gelijk een vraagje wat ook over RTC gaat,

met minimale kennis stelde ik een arduino samen om op een aantal punten temperaturen te meten om zodoende mijn CV en vloerverwarming te optimaliseren.

Door wat voorbeelden aan te passen met wat knippen,plakken en proberen kwam ik op een werkende sketch die om de 30 sec de datum tijd en 4 temperaturen list,
die importeer ik dan in excel om het in een grafiek te tonen.

Dat alles werkt alleen loopt de klok van de arduino niet gelijk met mijn PC en ik krijg die niet gelijk gezet
hierom installeerde ik nog RTClib.h maar krijg steeds foutmeldingen,
De vraag is hoe ik deze gelijk kan zetten,

De sketch:


#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS3231.h>
#include <RTClib.h>

DS3231 clock;
RTCDateTime dt;

#define DS18B20_PIN 2 // Pin DS18B20 definieren Arduino D2

OneWire oneWire(DS18B20_PIN); // OneWire Referentie
DallasTemperature sensors(&oneWire); // DS18B20 initialiseren

void setup() {

// Seriele uit starten
Serial.begin(9600);
// Initialize DS3231
Serial.println("Initialize DS3231");;
clock.begin();
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

sensors.begin(); // DS18B20 starten
//Serial.print("Sensoren: ");


Serial.print(sensors.getDeviceCount()); //JC output onveranderd

}

void loop() {
dt = clock.getDateTime();
Serial.println("");
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.print(" , ");


sensors.requestTemperatures(); // Temperatursensor(en) uitlezen
for (byte i = 0; i < sensors.getDeviceCount(); i++) { // Temperatur ausgeben
show_temperature(i + 1, sensors.getTempCByIndex(i));
delay(833);// JC >500 voorkomt foutmetingen 6x833=5000
}

delay(30000); // 30s Pause
}

// Temperatur ausgeben
void show_temperature(byte num, float temp) {

Serial.print("T");
Serial.print(num);
Serial.print(": ");
Serial.print(temp);
Serial.print(" , "); // Kommagescheiden tbv excel
//Serial.write(176); // °-teken correct weergevenn
Serial.print("");
}


Het resultaat van de verificatie:

In file included from D:\Documents\Arduino\libraries\sketch_datetimetemp30sDEF\sketch_datetimetemp30sDEF.ino:5:0:
D:\Documents\Arduino\libraries\RTClib\src/RTClib.h:25:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
#include <Adafruit_I2CDevice.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Multiple libraries were found for "OneWire.h"
Used: D:\Documents\Arduino\libraries\OneWire
Not used: D:\Documents\Arduino\libraries\OneWire-2.3.3
Multiple libraries were found for "DS3231.h"
Used: D:\Documents\Arduino\libraries\DS3231
Not used: D:\Documents\Arduino\libraries\Arduino-DS3231-master
Compilation error: exit status 1}


Ik hoop dat iemand mij een oplossing kan geven voor dit probleem,
BTW, excuses als ik de verkeerde termen gebruik, ik ben echt een leek,

Groet,
Jack

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor shooter » 16 Jan 2022, 18:08

je hebt ergens een fout gemaakt met de adafruit library die kan niet gevonden worden.
dus je library een beetje opnetten en weer proberen.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 22 Feb 2018, 15:51

Re: Foute uitvoer op LCD (met RTC)

Berichtdoor jackentiny » 12 Mrt 2022, 13:02

Ik heb nog een probleem met mijn setup,

Ik draai arduino onder linux mint,
Ik log dus om de 30 sec 7 temperaturen,
Als ik de temperaturen log in de sereële monitor hangt het systeem zich op na een uurtje of 6,
Ik kom er alleen met een harde reset uit en ben dan alle gegevens kwijt,
Met de plotter heb ik dat probleem niet,

Ik hoop dat iemand mij een advies hierin kan geven,

Groet,
Jack

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten