Ich möchte gerne versuchen, ein RTC-Modul (DS3231) zu verwenden und die Zeit auf einem LCD auszugeben. Ich verwende den Beispielcode aus der Library (ReadTest) und wollte ihn um das LCD erweitern. Das funktioniert aber nicht. Es wird nicht mal das Display gelöscht, obwohl ich im Setup lcd.clear(); eingetragen habe. Wenn ich bei einer Zeile, z.B.: lcd.print(tmHour); eingebe lcd.print("Test"); dann wird mir der Text auch ausgegeben, das LCD funktioniert also grundsätzlich. Was mache ich hier falsch?
Irgendwo habe ich gelesen, dass die Library des 1307 auch für den 3231 passen soll (edit: hier DS1307RTC Library, For Accessing Real Time Clock (RTC) Chips). Am seriellen Monitor wird jedenfalls alles so ausgegeben, wie es soll.
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
lcd.clear();
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
lcd.setCursor(0, 0);
lcd.print(tm.Hour);
lcd.setCursor(2, 1);
lcd.print(tm.Minute);
lcd.setCursor(4, 2);
lcd.print(tm.Second);
lcd.setCursor(8, 3);
lcd.print(tmYearToCalendar(tm.Year));
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}