// 0.0 Original az_delivery // 0.1 LCD // 0.2 RTC // 0.3 RTC update @ 1:00 #include // Library for LCD LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x3f, 20, 4); #define STATUS_PIN LED_BUILTIN #define DCF_PIN 2 #include #include "RTClib.h" RTC_DS3231 rtc; int HIGH_Start = 0; int HIGH_Ende = 0; int HIGH_Zeit = 0; int LOW_Start = 0; int LOW_Ende = 0; int LOW_Zeit = 0; int ZONE = 0; int disp=0; bool Signal = false; bool neueMinute = false; int BIT = -1; int ZEIT[65]; int ZEIT_STUNDE; int ZEIT_MINUTE; int ZEIT_TAG; int ZEIT_MONAT; int ZEIT_JAHR; int ZEIT_WOCHENTAG; int PAR_STUNDE; int PAR_MINUTE; int PAR_BEGINN; void setup() { lcd.init(); lcd.backlight(); lcd.clear(); Serial.begin(115200); pinMode(DCF_PIN, INPUT); pinMode(STATUS_PIN, OUTPUT); Serial.println("Syncronisierung"); lcd.setCursor(0, 0); lcd.print("SYNCRONISIERUNG"); } void loop() { if (BIT > 60) {neueMinute = false;} int DCF_SIGNAL = digitalRead(DCF_PIN); if (DCF_SIGNAL == HIGH && Signal == false) { Signal = true; HIGH_Start = millis(); LOW_Ende = HIGH_Start; LOW_Zeit = LOW_Ende - LOW_Start; if (neueMinute == true) { PrintBeschreibung(BIT); //Serial.print("Bit"); //Serial.print (BIT); //Serial.print (": "); ZEIT[BIT] = (BIT_Zeit(LOW_Zeit)); Serial.print (ZEIT[BIT]); //Serial.println (); } else { Serial.print("."); } } if (DCF_SIGNAL == LOW && Signal == true) { Signal = false; HIGH_Ende = millis(); LOW_Start = HIGH_Ende; HIGH_Zeit = HIGH_Ende - HIGH_Start; NEUMINUTE(LOW_Zeit); } lcdausgabe(); } // main-loop int BIT_Zeit (int LOW_Zeit) { if (LOW_Zeit >= 851 && LOW_Zeit <= 950) {return 0;} if (LOW_Zeit >= 750 && LOW_Zeit <= 850) {return 1;} if (LOW_Zeit <= 350) {BIT-=1;return "";} } void NEUMINUTE (int LOW_Zeit) { if (LOW_Zeit >= 1700) { BIT = 0; neueMinute = true; ZEIT_STUNDE = ZEIT[29]*1+ZEIT[30]*2+ZEIT[31]*4+ZEIT[32]*8+ZEIT[33]*10+ZEIT[34]*20; ZEIT_MINUTE = ZEIT[21]*1+ZEIT[22]*2+ZEIT[23]*4+ZEIT[24]*8+ZEIT[25]*10+ZEIT[26]*20+ZEIT[27]*40; // Sekunde einbauen //ZEIT_SEKUNDE = ZEIT[21]*1+ZEIT[22]*2+ZEIT[23]*4+ZEIT[24]*8+ZEIT[25]*10+ZEIT[26]*20+ZEIT[27]*40; PAR_STUNDE = ZEIT[35]; PAR_MINUTE = ZEIT[28]; ZEIT_TAG = ZEIT[36]*1+ZEIT[37]*2+ZEIT[38]*4+ZEIT[39]*8+ZEIT[40]*10+ZEIT[41]*20; ZEIT_MONAT = ZEIT[45]*1+ZEIT[46]*2+ZEIT[47]*4+ZEIT[48]*8+ZEIT[49]*10; ZEIT_JAHR = 2000+ZEIT[50]*1+ZEIT[51]*2+ZEIT[52]*4+ZEIT[53]*8+ZEIT[54]*10+ZEIT[55]*20+ZEIT[56]*40+ZEIT[57]*80; PAR_BEGINN = ZEIT[20]; ZEIT_WOCHENTAG = ZEIT[44]*4+ZEIT[43]*2+ZEIT[42]*1; rtc.adjust(DateTime((ZEIT_JAHR),(ZEIT_MONAT),(ZEIT_TAG),(ZEIT_STUNDE),(ZEIT_MINUTE), 0)); DateTime now = rtc.now(); Serial.println(); Serial.println("*****************************"); Serial.print ("Uhrzeit: "); Serial.println(); Serial.print (ZEIT_STUNDE); Serial.print (":"); Serial.print (ZEIT_MINUTE); Serial.println(); Serial.println(); Serial.print ("Datum: "); Serial.println(); Serial.print (ZEIT_TAG); Serial.print ("."); Serial.print (ZEIT_MONAT); Serial.print ("."); Serial.print (ZEIT_JAHR); Serial.println(); Serial.print ("WT"); Serial.print (ZEIT_WOCHENTAG); Serial.print (ZEIT[44]); Serial.print (ZEIT[43]); Serial.print (ZEIT[42]); Serial.println("*****************************"); disp=1; lcd.clear(); lcd.setCursor(0, 0); // Set the cursor on the first column and first row. if (ZEIT_STUNDE < 10) lcd.print(" "); lcd.print(ZEIT_STUNDE); lcd.setCursor(2, 0); lcd.print(":"); lcd.setCursor(3, 0); if (ZEIT_MINUTE < 10) lcd.print("0"); lcd.print(ZEIT_MINUTE); lcd.setCursor(5, 0); lcd.print(""); //lcd.setCursor(6, 0); //lcd.setCursor(0, 1); if ((ZEIT[17]==0) && (ZEIT[18]==1)) lcd.print (" MEZ"); if ((ZEIT[17]==1) && (ZEIT[18]==0)) lcd.print (" MESZ"); if ((ZEIT[17]==0) && (ZEIT[18]==0)) lcd.print (" No DCF" ); lcd.setCursor(0, 1); lcd.print(ZEIT_TAG); lcd.print(". "); lcd.setCursor(4, 1); switch (ZEIT_MONAT) { case 1:lcd.print("Januar");break; case 2:lcd.print("Februar");break; case 3:lcd.print("März");break; case 4:lcd.print("April");break; case 5:lcd.print("Mai");break; case 6:lcd.print("Juni");break; case 7:lcd.print("Juli");break; case 8:lcd.print("August");break; case 9:lcd.print("September");break; case 10:lcd.print("Oktober");break; case 11:lcd.print("November");break; case 12:lcd.print("Dezember");break; } lcd.print(" "); //lcd.setCursor(6, 1); lcd.print(ZEIT_JAHR); lcd.setCursor(10, 1); switch (ZEIT_WOCHENTAG) { case 1:lcd.print("Mon");break; case 2:lcd.print("Die");break; case 3:lcd.print("Mit");break; case 4:lcd.print("Don");break; case 5:lcd.print("Fre");break; case 6:lcd.print("Sam");break; case 7:lcd.print("Son");break; } lcd.setCursor(0, 2); lcd.print("RTC:"); if (now.hour() < 10) lcd.print("0"); lcd.print(now.hour(), DEC); lcd.print(":"); if (now.minute() < 10) lcd.print("0"); lcd.print(now.minute(), DEC); lcd.print(":"); if (now.second() < 10) lcd.print("0"); lcd.print(now.second(), DEC); lcd.setCursor(0, 3); switch (ZEIT_WOCHENTAG) { case 1:lcd.print("Mon");break; case 2:lcd.print("Die");break; case 3:lcd.print("Mit");break; case 4:lcd.print("Don");break; case 5:lcd.print("Fre");break; case 6:lcd.print("Sam");break; case 7:lcd.print("Son");break; } lcd.print(" "); lcd.print(now.day(), DEC); lcd.print(". "); lcd.print(now.month(), DEC); lcd.print("-"); lcd.print(now.year(), DEC); //lcd.print(" dow:"); //lcd.print(now.dayOfTheWeek()); } else {BIT++;} } void lcdausgabe() { lcd.clear(); lcd.setCursor(0, 0); // Set the cursor on the first column and first row. if (ZEIT_STUNDE < 10) lcd.print(" "); lcd.print(ZEIT_STUNDE); lcd.setCursor(2, 0); lcd.print(":"); lcd.setCursor(3, 0); if (ZEIT_MINUTE < 10) lcd.print("0"); lcd.print(ZEIT_MINUTE); lcd.setCursor(5, 0); lcd.print(""); //lcd.setCursor(6, 0); //lcd.setCursor(0, 1); if ((ZEIT[17]==0) && (ZEIT[18]==1)) lcd.print (" MEZ"); if ((ZEIT[17]==1) && (ZEIT[18]==0)) lcd.print (" MESZ"); if ((ZEIT[17]==0) && (ZEIT[18]==0)) lcd.print (" No DCF" ); lcd.setCursor(0, 1); lcd.print(ZEIT_TAG); lcd.print(". "); lcd.setCursor(4, 1); switch (ZEIT_MONAT) { case 1:lcd.print("Januar");break; case 2:lcd.print("Februar");break; case 3:lcd.print("März");break; case 4:lcd.print("April");break; case 5:lcd.print("Mai");break; case 6:lcd.print("Juni");break; case 7:lcd.print("Juli");break; case 8:lcd.print("August");break; case 9:lcd.print("September");break; case 10:lcd.print("Oktober");break; case 11:lcd.print("November");break; case 12:lcd.print("Dezember");break; } lcd.print(" "); //lcd.setCursor(6, 1); lcd.print(ZEIT_JAHR); lcd.setCursor(10, 1); switch (ZEIT_WOCHENTAG) { case 1:lcd.print("Mon");break; case 2:lcd.print("Die");break; case 3:lcd.print("Mit");break; case 4:lcd.print("Don");break; case 5:lcd.print("Fre");break; case 6:lcd.print("Sam");break; case 7:lcd.print("Son");break; } lcd.setCursor(0, 2); lcd.print("RTC:"); if (now.hour() < 10) lcd.print("0"); lcd.print(now.hour(), DEC); lcd.print(":"); if (now.minute() < 10) lcd.print("0"); lcd.print(now.minute(), DEC); lcd.print(":"); if (now.second() < 10) lcd.print("0"); lcd.print(now.second(), DEC); lcd.setCursor(0, 3); switch (ZEIT_WOCHENTAG) { case 1:lcd.print("Mon");break; case 2:lcd.print("Die");break; case 3:lcd.print("Mit");break; case 4:lcd.print("Don");break; case 5:lcd.print("Fre");break; case 6:lcd.print("Sam");break; case 7:lcd.print("Son");break; } lcd.print(" "); lcd.print(now.day(), DEC); lcd.print(". "); lcd.print(now.month(), DEC); lcd.print("-"); lcd.print(now.year(), DEC); } void PrintBeschreibung(int BitNummer) { switch (BitNummer) { case 0: Serial.println("\n# START MINUTE (IMMER 0)"); break; case 1: Serial.println("\n# WETTERDATEN"); break; case 15: Serial.println("\n# RUFBIT"); break; case 16: Serial.println("\n# MEZ/MESZ"); break; case 17: Serial.println("\n# MESZ"); ZONE = 2; break; case 18: Serial.println("\n# MEZ"); ZONE = 1;break; case 19: Serial.println("\n# SCHALTSEKUNDE"); break; case 20: Serial.println("\n# BEGIN ZEITINFORMATION (IMMER 1)"); break; case 21: Serial.println("\n# MINUTEN"); break; case 28: Serial.println("\n# PARITAET MINUTE"); break; case 29: Serial.println("\n# STUNDE");break; case 35: Serial.println("\n# PARITAET STUNDE"); break; case 36: Serial.println("\n# TAG"); break; case 42: Serial.println("\n# WOCHENTAG"); break; case 45: Serial.println("\n# MONAT"); break; case 50: Serial.println("\n# JAHR"); break; case 58: Serial.println("\n# PARITAET DATUM"); break; } }