Projekte und Tutorials für Arduino › Foren › StartHardware-Forum › Zeitmodul DS3231
Schlagwörter: DS3231 Wochentag auslesen
- Dieses Thema hat 3 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahre, 5 Monaten von Stefan Hermann.
-
AutorBeiträge
-
DirkTeilnehmer
Hallo Zusammen,
ich habe mir ein 16×2-Display gekauft und habe dazu ein Zeitmodul DS3231 und ein Temperaturmodul DHT gesteckt. Das alles an einen Arduino Uno gelötet bzw. gesteckt und folgenden Code geschrieben:
#include "DHT.h" #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <DS3231.h> DS3231 rtc(SDA, SCL); DHT dht; LiquidCrystal_I2C lcd(0x27,16,2); Time t; void setup() { dht.setup(2); // data pin 2 lcd.init(); // Initialisiert das Display rtc.begin(); // Initialisiert das Zeitmodul //rtc.setTime(21, 40, 0); //Hiermit kann man die Uhr stellen lcd.backlight(); Serial.begin(115200); } void loop(){ lcd.setCursor(0,0); lcd.print(rtc.getDOWStr(2)); lcd.setCursor(11,0); lcd.print(rtc.getTimeStr(1)); float humidity = dht.getHumidity(); float temperature = dht.getTemperature(); lcd.setCursor(0,1); lcd.print(temperature, 1); lcd.print("\xDF""C"); lcd.setCursor(7,1); lcd.print(humidity, 1); lcd.print("%relF"); // display_schalten(); //funktioniert noch nicht delay(1000); } //Wochentage auslesen void display_schalten(){ t = rtc.getTime(); // Die Zeit auslesen vom DS3231 int stunde = t.hour; int minute = t.min; int sekunde = t.sec; char *tag = rtc.getDOWStr(); if (minute = 20){ lcd.noDisplay(); } Serial.print("Stunde: "); Serial.println(stunde); Serial.print("Minute: "); Serial.println(minute); Serial.print("Tag: "); Serial.println(tag); } void tag_auslesen(){ String tage = String(rtc.getDOWStr(2)); if (tage = "Monday") { tage = "Montag"; } else if (tage = "Tuesday") { tage = "Dienstag"; } else if (tage = "Wednesday") { tage = "Mittwoch"; } else if (tage = "Thursday") { tage = "Donnerstag"; } else if (tage = "Friday") { tage = "Freitag"; } else if (tage = "Saturday") { tage = "Samstag"; } else //(tage = "Sunday") { tage = "Sonntag"; // } }
Leider ignoriert der Uno meinen Wunsch, die Wochentage auf deutsch darzustellen ;-).
Hat jemand eine Idee warum.
Das zweite Problem ist das ich eine Zeitschaltung programmieren will, ab 23 Uhr soll das Display mit NoDisplay() ausgehen
und morgens um 6 Uhr wieder mit Display() angehen. Mein Versuch mit Minute=20 hat nicht geklappt.
Hat jemand Vorschläge?Gruß in die Welt
DirkStefan HermannVerwalterHallo Dirk,
ich weiß es nicht ganz genau, aber einen Fehler hab ich entdeckt. Bei den if-Abfragen musst du ein doppeltes Gleichheitszeichen verwenden. Also statt:
if (tage = "Monday") { tage = "Montag"; }
Musst du:
if (tage == "Monday") { tage = "Montag"; }
benutzen und das natürlich bei allen ifs.
Ich hoffe, das hilft schon mal weiter.
Liebe Grüße
DirkTeilnehmerJa, das war der Fehler.
Mittlerweile klappt alles. Sogar die Zeitschaltung des Displays.
Vielen Dank.
Das Sketch sieht jetzt so aus:#include "DHT.h" #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <DS3231.h> // Init the DS3231 using the hardware interface DS3231 rtc(SDA, SCL); DHT dht; LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display Time t; String tage; void setup() { dht.setup(2); // data pin 2 lcd.init(); // Initialisiert das Display rtc.begin(); // Initialisiert das Zeitmodul //rtc.setTime(21, 40, 0); //Hiermit kann man die Uhr stellen lcd.backlight(); //Serial.begin(115200); lcd.setCursor(0,0); lcd.print("Version 27.Nov19"); } void loop(){ //delay(dht.getMinimumSamplingPeriod()); lcd.setCursor(0,0); //Tage ins deutsche übersetzen tage = rtc.getDOWStr(2); if (tage == "Monday") { tage = "Montag"; } else if (tage == "Tuesday") { tage = "Dienstag"; } else if (tage == "Wednesday") { tage = "Mittwoch"; } else if (tage == "Thursday") { tage = "Donnerstag"; } else if (tage == "Friday") { tage = "Freitag"; } else if (tage == "Saturday") { tage = "Samstag"; } else if(tage == "Sunday") { tage = "Sonntag"; } lcd.print(tage); lcd.setCursor(11,0); lcd.print(rtc.getTimeStr(1)); float humidity = dht.getHumidity(); float temperature = dht.getTemperature(); lcd.setCursor(0,1); lcd.print(temperature, 1); lcd.print("\xDF""C"); lcd.setCursor(7,1); lcd.print(humidity, 1); lcd.print("%relF"); display_schalten(); delay(1000); } //Display an und ausschalten void display_schalten(){ t = rtc.getTime(); // Die Zeit auslesen vom DS3231 int stunde = t.hour; int minute = t.min; int sekunde = t.sec; //Das Display um 4 Uhr morgens einmal löschen, damit der Tag richtig dargestellt wird // Weil längere Tagesnamen ihren Namen nicht löschen. if (stunde == 4 && sekunde == 5){ lcd.clear(); } // In der Zeit von 6 Uhr bis 21:59 Display anschalten if (stunde > 5 && stunde < 22 ){ lcd.backlight(); } else if (stunde == 22 && minute == 0){ lcd.clear(); delay(100); lcd.setCursor(0,0); lcd.print("Gute Nacht"); lcd.setCursor(0,1); lcd.print("lieber Dirk"); } // Display ausschalten else{ lcd.noBacklight(); } }
Stefan HermannVerwalterHallo Dirk, danke für die Rückmeldung! Schön, dass es jetzt klappt :-)
-
AutorBeiträge