#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
hd44780_I2Cexp lcdDisplay;
const uint8_t spaltenAnzahl = 20;
const uint8_t zeilenAnzahl = 4;
const byte ldrAnalogerPin = A0;
const int ldrSchwelle = 512; // je kleiner, desto heller
const int ldrHysterese = 50;
enum HintergrundbeleuchtungZustand { HINTERGRUNDBELEUCHTUNG_AN, HINTERGRUNDBELEUCHTUNG_AUS };
HintergrundbeleuchtungZustand hintergrundbeleuchtungZustand = HINTERGRUNDBELEUCHTUNG_AN;
void setzeHintergrundbeleuchtung(bool beleuchtungAn) {
if (beleuchtungAn) {
lcdDisplay.backlight();
hintergrundbeleuchtungZustand = HINTERGRUNDBELEUCHTUNG_AN;
} else {
lcdDisplay.noBacklight();
hintergrundbeleuchtungZustand = HINTERGRUNDBELEUCHTUNG_AUS;
}
}
void aktualisiereHintergrundbeleuchtung() {
int ldrWert = analogRead(ldrAnalogerPin);
switch (hintergrundbeleuchtungZustand) {
case HINTERGRUNDBELEUCHTUNG_AUS:
if (ldrWert > ldrSchwelle + ldrHysterese) setzeHintergrundbeleuchtung(true);
break;
case HINTERGRUNDBELEUCHTUNG_AN:
if (ldrWert < ldrSchwelle - ldrHysterese) setzeHintergrundbeleuchtung(false);
break;
}
}
void setup() {
Serial.begin(115200);
int result = lcdDisplay.begin(spaltenAnzahl, zeilenAnzahl);
if (result) {
Serial.print("LCD-Initialisierung fehlgeschlagen: ");
Serial.println(result);
hd44780::fatalError(result);
}
lcdDisplay.clear();
setzeHintergrundbeleuchtung(false);
Serial.println("OK");
}
void loop() {
aktualisiereHintergrundbeleuchtung();
delay(100);
}