Ich habe den code von Wolle etwas erweitert und einen LDR mit Widerstandsteiler an A0. Der Wert wird auch ausgegeben , aber die Hintergrundbeleuchtung schaltet nicht ein.
```cpp
#include <Wire.h>
#include <RTClib.h> // Adafruit library for the DS3231
#include <LiquidCrystal_I2C.h> // library for the LCD display
RTC_DS3231 rtc; // create RTC_DS3231 object
LiquidCrystal_I2C lcd(0x27, 20, 2); // create display object (address, columns, rows)
unsigned long startTime = 0; //Hier merken wir uns nach jedemr Messung die Zeit in Millisekunden (seit dem Start des Arduino)
void setup() {
Serial.begin(115200);
lcd.init();
//lcd.backlight();
lcd.clear();
if (!rtc.begin()) {
Serial.println(F("Couldn't find RTC"));
while (1) {}
}
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // set rtc to date/time of compilation
rtc.disable32K(); // stop signal at the 32K pin
rtc.writeSqwPinMode(DS3231_OFF); // stop signal at the SQW pin
}
void loop() {
if (millis() % 1000 == 0) { // update date/time every second
printDateTime();
delay(1);
}
if (millis() > (startTime + 10000)) { // alle 10 sek den A0 prüfen
startTime = millis();
if (analogRead(A0) < 500) {
lcd.backlight(); // das Licht schaltet nicht ein
Serial.println((analogRead(A0))); // die Ausgabe erfolgt ??
delay(1);
}
}
}
void printDateTime() {
DateTime now = rtc.now();
char datBuf[] = "DDD, DD.MM.YYYY"; // define the date format
char timeBuf[] = "hh:mm:ss"; // define the time format
Serial.println(now.toString(datBuf)); // print date
Serial.println(now.toString(timeBuf)); // print time
lcd.setCursor(0, 0);
lcd.print(datBuf); // display date
lcd.setCursor(0, 1);
lcd.print(timeBuf); // display time
lcd.setCursor(10, 1);
lcd.print(rtc.getTemperature());
}
20x2 oder 20x4 spielt glaube ich nicht so eine große Rolle.Habe die Ausgabe der Temperatur trotz 20x2 einfügen können.Und im Setup mit bedacht lcd.backlight auskommentiert.Will das erst einschalten wenn der Wert an A0 einen Wert unterschreitet.Das simuliere ich durch abdunkeln des LDR `s.
Funktioniert das Backlight dann grundsätzlich, ohne deine Erweiterung?
Welche eine Library nutzt du für dein LCD ? Bitte Link posten.
Nicht alle können mit dem Backlight umgehen.
Ich habe das im Setup auskommentiert,dort hat es funktioniert.
habe dies aus dem Kopf der Lib//YWROBOT #ifndef LiquidCrystal_I2C_h #define LiquidCrystal_I2C_h
sieh dir noch mal ganz genau das Beispiel "Blink Without Delay" an und nutze wie dort eine Subtraktion von unsigned Variablen!
Und nutzte das gleiche Konzept für deinen "Sekundentimer".
P.S.: in der Tat macht bei einem 20 stelligen Display mit dieser Lib keinen Unterschied ob 2 oder 4 Zeilig, aber warum will man etwas falsch hinschreiben.
```cpp
#include <Wire.h>
#include <RTClib.h> // Adafruit library for the DS3231
#include <LiquidCrystal_I2C.h> // library for the LCD display
RTC_DS3231 rtc; // create RTC_DS3231 object
LiquidCrystal_I2C lcd(0x27, 20, 4); // create display object (address, columns, rows)
// unsigned long startTime = 0; //Hier merken wir uns nach jedemr Messung die Zeit in Millisekunden (seit dem Start des Arduino)
unsigned long verzMillis = 0;
unsigned long verz1Millis = 0;
void setup() {
Serial.begin(115200);
lcd.init();
//lcd.backlight();
lcd.clear();
if (!rtc.begin()) {
Serial.println(F("Couldn't find RTC"));
while (1) {}
}
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // set rtc to date/time of compilation
rtc.disable32K(); // stop signal at the 32K pin
rtc.writeSqwPinMode(DS3231_OFF); // stop signal at the SQW pin
}
void loop() {
unsigned long aktMillis = millis();
aktMillis = millis(); // werden zum berechnen der Verzögerungen genutzt
// if (millis() % 1000 == 0) { // update date/time every second
if (aktMillis - verz1Millis >= 1000) { // jede Sekunde
verz1Millis = aktMillis;
printDateTime();
delay(1);
}
if (aktMillis - verzMillis >= 10000) { // alle 10 sek den A0 prüfen
verzMillis = aktMillis;
// if (millis() > (startTime + 10000)) {
// startTime = millis();
if (analogRead(A0) < 500) {
lcd.backlight(); // das Licht schaltet nicht ein
Serial.println((analogRead(A0))); // die Ausgabe erfolgt ??
delay(1);
} else {
lcd.noBacklight();
}
}
}
void printDateTime() {
DateTime now = rtc.now();
char datBuf[] = "DDD, DD.MM.YYYY"; // define the date format
char timeBuf[] = "hh:mm:ss"; // define the time format
Serial.println(now.toString(datBuf)); // print date
Serial.println(now.toString(timeBuf)); // print time
lcd.setCursor(0, 0);
lcd.print(datBuf); // display date
lcd.setCursor(0, 1);
lcd.print(timeBuf); // display time
lcd.setCursor(10, 1);
lcd.print(rtc.getTemperature()); // Temperatur ausgeben
}
So besser ?
hab dann gleich das Modulo erschlagen !
/tmp/.arduinoIDE-unsaved202607-2977-1wi7xve.udsq/sketch_jan7b/sketch_jan7b.ino: In function 'void printDateTime()':
/tmp/.arduinoIDE-unsaved202607-2977-1wi7xve.udsq/sketch_jan7b/sketch_jan7b.ino:66:37: error: no matching function for call to 'DateTime::toString(const char [11], char [20])'
now.toString("DD.MM.YYYY", dateBuf);
^
In file included from /tmp/.arduinoIDE-unsaved202607-2977-1wi7xve.udsq/sketch_jan7b/sketch_jan7b.ino:2:0:
/home/walter/Arduino/libraries/RTClib/src/RTClib.h:153:9: note: candidate: char* DateTime::toString(char*) const
char *toString(char *buffer) const;
^~~~~~~~
/home/walter/Arduino/libraries/RTClib/src/RTClib.h:153:9: note: candidate expects 1 argument, 2 provided
/tmp/.arduinoIDE-unsaved202607-2977-1wi7xve.udsq/sketch_jan7b/sketch_jan7b.ino:67:35: error: no matching function for call to 'DateTime::toString(const char [9], char [10])'
now.toString("hh:mm:ss", timeBuf);
^
In file included from /tmp/.arduinoIDE-unsaved202607-2977-1wi7xve.udsq/sketch_jan7b/sketch_jan7b.ino:2:0:
/home/walter/Arduino/libraries/RTClib/src/RTClib.h:153:9: note: candidate: char* DateTime::toString(char*) const
char *toString(char *buffer) const;
^~~~~~~~
/home/walter/Arduino/libraries/RTClib/src/RTClib.h:153:9: note: candidate expects 1 argument, 2 provided
exit status 1
Compilation error: no matching function for call to 'DateTime::toString(const char [11], char [20])'
char dateBuf[20] = "DDD, DD.MM.YYYY"; // define the date format
char timeBuf[10] = "hh:mm:ss"; // define the time format
now.toString(dateBuf);
now.toString(timeBuf);