#include "Wire.h" #define DS3231_ADDRESSE 0x68 int merker1=100; int merker2=100; int merker3=100; int merker4=100; int tasterminute=15; int tasterstatusm = 0; int tasterstunde=16; int tasterstatush = 0; void setup() { Wire.begin(); pinMode(14, OUTPUT); pinMode(tasterminute, INPUT); pinMode(tasterstunde, INPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); digitalWrite(2, LOW); digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(7, HIGH); digitalWrite(8, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); digitalWrite(13, HIGH); digitalWrite(2, HIGH); digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(7, LOW); digitalWrite(8, HIGH); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(13, LOW); } void loop() { BerlinUhr(); } void leseDS3231zeit(byte *sekunde, byte *minute,byte *stunde, byte *wochentag, byte *tag, byte *monat, byte *jahr) { Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0); // DS3231 Register zu 00h Wire.endTransmission(); Wire.requestFrom(DS3231_ADDRESSE, 7); *sekunde = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *stunde = bcdToDec(Wire.read() & 0x3f); *wochentag = bcdToDec(Wire.read()); *tag = bcdToDec(Wire.read()); *monat = bcdToDec(Wire.read()); *jahr = bcdToDec(Wire.read()); } void BerlinUhr(){ byte sekunde, minute, stunde, wochentag, tag, monat, jahr; leseDS3231zeit(&sekunde, &minute, &stunde, &wochentag, &tag, &monat, &jahr); if (sekunde %2 == 0) { digitalWrite(14, HIGH); } else { digitalWrite(14, LOW); } if (minute != merker1) { if ((minute == 1) || (minute== 6) || (minute== 11) || (minute== 16) || (minute== 21) || (minute== 26) || (minute== 31) || (minute== 36) || (minute== 41) || (minute== 46) || (minute== 51) || (minute== 56)) { digitalWrite(2, LOW);digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(4, LOW); } if ((minute == 2) || (minute== 7) || (minute== 12) || (minute== 17) || (minute== 22) || (minute== 27) || (minute== 32) || (minute== 37) || (minute== 42) || (minute== 47) || (minute== 52) || (minute== 57)) { digitalWrite(2, LOW);digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(4, LOW); } if ((minute == 3) || (minute== 8) || (minute== 13) || (minute== 18) || (minute== 23) || (minute== 28) || (minute== 33) || (minute== 38) || (minute== 43) || (minute== 48) || (minute== 53) || (minute== 58)) { digitalWrite(2, LOW);digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(3, HIGH);digitalWrite(3, LOW); digitalWrite(4, HIGH); digitalWrite(4, LOW); } if ((minute == 4) || (minute== 9) || (minute== 14) || (minute== 19) || (minute== 24) || (minute== 29) || (minute== 34) || (minute== 39) || (minute== 44) || (minute== 49) || (minute== 54) || (minute== 59)) { digitalWrite(2, LOW);digitalWrite(2, HIGH); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(3, HIGH); digitalWrite(3, LOW); digitalWrite(3, HIGH);digitalWrite(3, LOW); digitalWrite(3, HIGH); digitalWrite(3, LOW);digitalWrite(4, HIGH); digitalWrite(4, LOW); } if ((minute == 0) || (minute== 5)|| (minute== 10) || (minute== 15) || (minute== 20) || (minute== 25) || (minute== 30) || (minute== 35) || (minute== 40) || (minute== 45) || (minute== 50) || (minute== 55)) { digitalWrite(2, LOW);digitalWrite(2, HIGH); digitalWrite(4, HIGH); digitalWrite(4, LOW); } merker1 = minute; } if (minute != merker2) { if ((minute >=5) and (minute <=9)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=10) and (minute <=14)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=15) and (minute <=19)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=20) and (minute <=24)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=25) and (minute <=29)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=30) and (minute <=34)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=35) and (minute <=39)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=40) and (minute <=44)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=45) and (minute <=49)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=50) and (minute <=54)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(7, LOW); } if ((minute >=55) and (minute <=59)) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(6, HIGH); digitalWrite(6, LOW); digitalWrite(6, HIGH); digitalWrite(6, LOW);digitalWrite(7, HIGH); digitalWrite(7, LOW); } if (minute ==0) { digitalWrite(5, LOW);digitalWrite(5, HIGH); digitalWrite(7, HIGH); digitalWrite(7, LOW); } } if (stunde != merker3) { if ((stunde == 1) || (stunde == 6) || (stunde == 11) || (stunde == 16) || (stunde == 21)) { digitalWrite(8, LOW);digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(10, LOW); } if ((stunde == 2) || (stunde == 7) || (stunde == 12) || (stunde == 17) || (stunde == 22)) { digitalWrite(8, LOW);digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(9, LOW);digitalWrite(9, HIGH); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(10, LOW); } if ((stunde == 3) || (stunde == 8) || (stunde == 13) || (stunde == 18) || (stunde == 23)) { digitalWrite(8, LOW);digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(9, LOW);digitalWrite(9, HIGH);digitalWrite(9, LOW); digitalWrite(9, HIGH);digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(10, LOW); } if ((stunde == 4) || (stunde == 9) || (stunde == 14) || (stunde == 19) || ((stunde == 0) and (minute ==0))) { digitalWrite(8, LOW);digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(9, LOW);digitalWrite(9, HIGH); digitalWrite(9, LOW);digitalWrite(9, HIGH);digitalWrite(9, LOW); digitalWrite(9, HIGH);digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(10, LOW); } if (((stunde == 0) and (minute >=1)) || (stunde == 5) || (stunde == 10) || (stunde == 15) || (stunde == 20)) { digitalWrite(8, LOW);digitalWrite(8, HIGH); digitalWrite(10, HIGH); digitalWrite(10, LOW); } } if (stunde != merker4) { if ((stunde >=5) and (stunde <=9)) { digitalWrite(11, LOW);digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(12, LOW); digitalWrite(13, HIGH); digitalWrite(13, LOW); } if ((stunde >=10) and (stunde <=14)) { digitalWrite(11, LOW);digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(12, LOW); digitalWrite(12, HIGH); digitalWrite(12, LOW);digitalWrite(13, HIGH); digitalWrite(13, LOW); } if ((stunde >=15) and (stunde <=19)) { digitalWrite(11, LOW);digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(12, LOW); digitalWrite(12, HIGH); digitalWrite(12, LOW);digitalWrite(12, HIGH); digitalWrite(12, LOW);digitalWrite(13, HIGH); digitalWrite(13, LOW); } if (((stunde >=20) and (stunde <=24)) or ((stunde ==0) and (minute ==0))) { digitalWrite(11, LOW);digitalWrite(11, HIGH); digitalWrite(12, HIGH); digitalWrite(12, LOW); digitalWrite(12, HIGH); digitalWrite(12, LOW);digitalWrite(12, HIGH); digitalWrite(12, LOW);digitalWrite(12, HIGH); digitalWrite(12, LOW);digitalWrite(13, HIGH); digitalWrite(13, LOW); } if ((stunde == 0) and (minute >=1)) { digitalWrite(11, LOW);digitalWrite(11, HIGH); digitalWrite(13, HIGH); digitalWrite(13, LOW); } } tasterstatusm=digitalRead(tasterminute); if (tasterstatusm == HIGH) { minute = minute + 1; sekunde = 1; if (minute == 60) minute = 0; Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0); Wire.write(decToBcd(sekunde)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(stunde)); Wire.write(decToBcd(wochentag)); Wire.write(decToBcd(tag)); Wire.write(decToBcd(monat)); Wire.write(decToBcd(jahr)); Wire.endTransmission(); delay (200); } tasterstatush=digitalRead(tasterstunde); if (tasterstatush == HIGH) { stunde = stunde + 1; if (stunde >= 24) stunde = 0; Wire.beginTransmission(DS3231_ADDRESSE); Wire.write(0); Wire.write(decToBcd(sekunde)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(stunde)); Wire.write(decToBcd(wochentag)); Wire.write(decToBcd(tag)); Wire.write(decToBcd(monat)); Wire.write(decToBcd(jahr)); Wire.endTransmission(); delay (200); } } byte decToBcd(byte val) { // Dezimal Zahl zu binary coded decimal (BCD) umwandeln return((val/10*16) + (val%10)); } byte bcdToDec(byte val) { // BCD (binary coded decimal) in Dezimal Zahl umwandeln return((val/16*10) + (val%16)); }