// #include #include #include #include #include // OLED Display Einstellungen (128x64 Pixel über I2C) #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // GPS Modul Pins (Rx=4, Tx=5 -> wir nutzen nur Rx an Pin 4 für GPS-TX) SoftwareSerial gpsSerial(4, 5); TinyGPSPlus gps; // Zeitzonen-Offset (z.B. +1 für MEZ / +2 für MESZ Sommerzeit) const int UTC_OFFSET = 2; void setup() { gpsSerial.begin(9600); // Standard-Baudrate der meisten GPS-Module (z.B. NEO-6M) // OLED initialisieren (I2C-Adresse meist 0x3C) if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { for(;;); // Stoppt, falls Display nicht gefunden wird } display.clearDisplay(); display.setTextColor(SSD1306_WHITE); display.setTextSize(2); display.setCursor(10, 20); display.print("Suche GPS..."); display.display(); } void loop() { // Eingehende GPS-Daten verarbeiten while (gpsSerial.available() > 0) { if (gps.encode(gpsSerial.read())) { zeigeUhrzeit(); } } } void zeigeUhrzeit() { display.clearDisplay(); // Prüfen, ob das GPS-Signal gültig ist if (gps.time.isValid()) { int stunde = gps.time.hour() + UTC_OFFSET; // Einfache Korrektur für den Tageswechsel durch Zeitzonensprung if (stunde >= 24) stunde -= 24; if (stunde < 0) stunde += 24; display.setTextSize(3); // Große Schrift für die Uhrzeit display.setCursor(10, 20); // Führende Nullen hinzufügen if (stunde < 10) display.print("0"); display.print(stunde); display.print(":"); if (gps.time.minute() < 10) display.print("0"); display.print(gps.time.minute()); display.print(":"); if (gps.time.second() < 10) display.print("0"); display.print(gps.time.second()); } else { // Falls noch kein Fix da ist, Text zentrieren display.setTextSize(2); display.setCursor(10, 24); display.print("Kein Signal"); } display.display(); }