Hallo Miteinander,
mein Name ist Marco und bin neu im Thema Arduino.
Ich habe einen Arduino UNO 4 und ein LCD Display mit I2C Schnittstelle das ich gerne Dimmen würde mit einen digitalen Lichtsensor. Ich habe einen bc557 Transistor mit einem 1k Widerstand davor. Sobald das lcd Display gedimmt wird kann ich es nicht mehr beschreiben. Mache ich etwas falsch? Chat GPT hilft mir auch nicht weiter :(. Hier ist mein code
`#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#define LIGHT_SENSOR_PIN 2
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS3231 rtc;
const int LCD = 3;
// Definiere ein gefülltes Zeichen (8x5 Pixel)
byte fullBlock[8] = {
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11111
};
void clearScreen() {
for (int row = 0; row < 4; row++) {
for (int col = 0; col < 20; col++) {
lcd.setCursor(col, row);
lcd.print(" "); // Löscht das Zeichen
}
}
}
void zeit(){
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) lcd.print("0"); // Führende Null für Minuten
lcd.print(now.minute());
}
void licht() {
bool istHell = digitalRead(LIGHT_SENSOR_PIN); // Lichtstatus lesen
if (istHell) {
analogWrite(LCD, 50);
Serial.print("dunkel"); // Dunkle Helligkeit
} else {
Serial.print("hell");
analogWrite(LCD, 255); // Helle Helligkeit
}
}
void setup() {
Serial.begin(9600);
pinMode(LCD, OUTPUT);
analogWrite(LCD, 255);
pinMode(LIGHT_SENSOR_PIN, INPUT);
lcd.begin();
lcd.backlight();
// Speichere das Custom-Zeichen in Speicherplatz 0
lcd.createChar(0, fullBlock);
// Zeilensteuerung (von außen nach innen)
for (int row = 0; row < 4; row++) {
if (row % 2 == 0) { // GERADE Zeilen (0 & 2)
for (int col = 0; col < 20; col++) {
lcd.setCursor(col, row); // Oben: Links → Rechts
lcd.write(byte(0));
lcd.setCursor(19 - col, 3 - row); // Unten: Rechts → Links
lcd.write(byte(0));
delay(25);
}
} else { // UNGERADE Zeilen (1 & 3)
for (int col = 19; col >= 0; col--) {
lcd.setCursor(col, row); // Oben: Rechts → Links
lcd.write(byte(0));
lcd.setCursor(19 - col, 3 - row); // Unten: Links → Rechts
lcd.write(byte(0));
delay(25);
}
}
}
// Wenn das Display voll ist -> 1x Blinken mit Rechtecken
clearScreen();
// RTC-Initialisierung
if (!rtc.begin()) {
Serial.println("RTC nicht gefunden!");
lcd.setCursor(0, 0);
lcd.print("RTC ERROR!");
while (1); // Endlosschleife, wenn kein RTC erkannt wird
}
// Falls die Zeit noch nicht gesetzt wurde, einmal setzen (nur beim ersten Start nötig)
if (rtc.lostPower()) {
Serial.println("RTC verlor Strom, setze Zeit...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Setzt Zeit auf Kompilierungszeit
}
}
void loop() {
Serial.print("1");
delay(2000);
licht();
delay(2000);
Serial.print("2");
delay(2000);
zeit();
Serial.print("3");
delay(2000);
Serial.print("4");
delay(2000);
}`
und das ist mein layout:
kann mir irgendjemand helfen?