#include #include #include //changed the library #include int debug = 1; // added a debug option for serial output // I kept the following int's int count = 0; int secondtime; int counthour = 0; int hourtime; int countminute = 0; int minutetime; int dotcount = 0; //Set shift register const int numberOfShiftRegisters = 3; // number of shift registers attached in series - I use 3 in series int serialDataPin = 2; // DS int clockPin = 4; // SHCP // switched the SHCP and STCP pins because of easier trace routing int latchPin = 3; // STCP ShiftRegister74HC595 sr(serialDataPin, clockPin, latchPin); // defined output pins for the 4 dots int dot1 = 5; int dot2 = 8; int dot3 = 7; int dot4 = 6; void setup() { // removed everything from the setup loop Serial.begin(9600); } void loop() { // removed Cathode prevention and buttonstate stuff tmElements_t tm; // different RTC implementation because of other DS1307 library if (RTC.read(tm)) { // added optional debug output and adapted it to the now used DS1307 library if (debug == 1) { Serial.print("RTC Time: "); Serial.print(tmYearToCalendar(tm.Year)); Serial.print('/'); Serial.print(tm.Month); Serial.print('/'); Serial.print(tm.Day); Serial.print(" ("); Serial.print(tm.Hour); Serial.print(":"); Serial.print(tm.Minute); Serial.print(":"); Serial.print(tm.Second); Serial.print(")"); Serial.print(" | "); } // I've kept the logic for writing the time in separated int's, but adapted it for the other used DS1307 library // e.G. hourtime = now.hour(); has changed to hourtime = tm.Hour ///////////////Hours/////////////// for (hourtime = tm.Hour; hourtime >= 10; hourtime = hourtime - 10) { int hourtimecount = 1 + hourtimecount; ++counthour; } runhours(); counthour = 0; ///////////////Minutes///////////// for (minutetime = tm.Minute; minutetime >= 10; minutetime = minutetime - 10) { int minutetimecount = 1 + minutetimecount; ++countminute; } runminutes(); countminute = 0; //////////////Seconds////////////// for (secondtime = tm.Second; secondtime >= 10; secondtime = secondtime - 10) { int secondtimecount = 1 + secondtimecount; ++count; } runseconds(); count = 0; // added dot animation if (dotcount == 1){ digitalWrite(dot1,LOW); digitalWrite(dot2,LOW); digitalWrite(dot3,LOW); digitalWrite(dot4,LOW); } else if (dotcount == 2){ digitalWrite(dot1,HIGH); digitalWrite(dot2,LOW); digitalWrite(dot3,LOW); digitalWrite(dot4,LOW); } else if (dotcount == 3){ digitalWrite(dot1,LOW); digitalWrite(dot2,HIGH); digitalWrite(dot3,LOW); digitalWrite(dot4,LOW); } else if (dotcount == 4){ digitalWrite(dot1,LOW); digitalWrite(dot2,LOW); digitalWrite(dot3,HIGH); digitalWrite(dot4,LOW); } else if (dotcount == 5){ digitalWrite(dot1,LOW); digitalWrite(dot2,LOW); digitalWrite(dot3,LOW); digitalWrite(dot4,HIGH); } else if (dotcount == 6){ digitalWrite(dot1,HIGH); digitalWrite(dot2,HIGH); digitalWrite(dot3,HIGH); digitalWrite(dot4,HIGH); dotcount = 0; } dotcount++; // adapted this from the DS1307 example sketch } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } // Kept the call functions but added optional debug output and changed the pin mappings and logics ////seconds - right //// void TurnOnR9() { if (debug == 1) { Serial.println(F("SR:9 ")); } sr.set(23, HIGH); sr.set(22, LOW); sr.set(21, HIGH); sr.set(20, LOW); } void TurnOnR8() { if (debug == 1) { Serial.println(F("SR:8 ")); } sr.set(23, HIGH); sr.set(22, LOW); sr.set(21, HIGH); sr.set(20, HIGH); } void TurnOnR7() { if (debug == 1) { Serial.println(F("SR:7 ")); } sr.set(23, LOW); sr.set(22, LOW); sr.set(21, HIGH); sr.set(20, HIGH); } void TurnOnR6() { if (debug == 1) { Serial.println(F("SR:6 ")); } sr.set(23, HIGH); sr.set(22, LOW); sr.set(21, LOW); sr.set(20, HIGH); } void TurnOnR5() { if (debug == 1) { Serial.println(F("SR:5 ")); } sr.set(23, HIGH); sr.set(22, LOW); sr.set(21, LOW); sr.set(20, LOW); } void TurnOnR4() { if (debug == 1) { Serial.println(F("SR:4 ")); } sr.set(23, LOW); sr.set(22, LOW); sr.set(21, LOW); sr.set(20, HIGH); } void TurnOnR3() { if (debug == 1) { Serial.println(F("SR:3 ")); } sr.set(23, LOW); sr.set(22, LOW); sr.set(21, LOW); sr.set(20, LOW); } void TurnOnR2() { if (debug == 1) { Serial.println(F("SR:2 ")); } sr.set(23, LOW); sr.set(22, LOW); sr.set(21, HIGH); sr.set(20, LOW); } void TurnOnR1() { if (debug == 1) { Serial.println(F("SR:1 ")); } sr.set(23, HIGH); sr.set(22, HIGH); sr.set(21, LOW); sr.set(20, LOW); } void TurnOnR0() { if (debug == 1) { Serial.println(F("SR:0 ")); } sr.set(23, LOW); sr.set(22, HIGH); sr.set(21, LOW); sr.set(20, LOW); } ////seconds - left //// void TurnOnL9() { if (debug == 1) { Serial.print(F("SL:9 ")); } sr.set(19, HIGH); sr.set(18, LOW); sr.set(17, HIGH); sr.set(16, LOW); } void TurnOnL8() { if (debug == 1) { Serial.print(F("SL:8 ")); } sr.set(19, HIGH); sr.set(18, LOW); sr.set(17, HIGH); sr.set(16, HIGH); } void TurnOnL7() { if (debug == 1) { Serial.print(F("SL:7 ")); } sr.set(19, LOW); sr.set(18, LOW); sr.set(17, HIGH); sr.set(16, HIGH); } void TurnOnL6() { if (debug == 1) { Serial.print(F("SL:6 ")); } sr.set(19, HIGH); sr.set(18, LOW); sr.set(17, LOW); sr.set(16, HIGH); } void TurnOnL5() { if (debug == 1) { Serial.print(F("SL:5 ")); } sr.set(19, HIGH); sr.set(18, LOW); sr.set(17, LOW); sr.set(16, LOW); } void TurnOnL4() { if (debug == 1) { Serial.print(F("SL:4 ")); } sr.set(19, LOW); sr.set(18, LOW); sr.set(17, LOW); sr.set(16, HIGH); } void TurnOnL3() { if (debug == 1) { Serial.print(F("SL:3 ")); } sr.set(19, LOW); sr.set(18, LOW); sr.set(17, LOW); sr.set(16, LOW); } void TurnOnL2() { if (debug == 1) { Serial.print(F("SL:2 ")); } sr.set(19, LOW); sr.set(18, LOW); sr.set(17, HIGH); sr.set(16, LOW); } void TurnOnL1() { if (debug == 1) { Serial.print(F("SL:1 ")); } sr.set(19, HIGH); sr.set(18, HIGH); sr.set(17, LOW); sr.set(16, LOW); } void TurnOnL0() { if (debug == 1) { Serial.print(F("SL:0 ")); } sr.set(19, LOW); sr.set(18, HIGH); sr.set(17, LOW); sr.set(16, LOW); } ////minutes - right //// void TurnOnMR9() { if (debug == 1) { Serial.print(F("MR:9 ")); } sr.set(15, HIGH); sr.set(14, LOW); sr.set(13, HIGH); sr.set(12, LOW); } void TurnOnMR8() { if (debug == 1) { Serial.print(F("MR:8 ")); } sr.set(15, HIGH); sr.set(14, LOW); sr.set(13, HIGH); sr.set(12, HIGH); } void TurnOnMR7() { if (debug == 1) { Serial.print(F("MR:7 ")); } sr.set(15, LOW); sr.set(14, LOW); sr.set(13, HIGH); sr.set(12, HIGH); } void TurnOnMR6() { if (debug == 1) { Serial.print(F("MR:6 ")); } sr.set(15, HIGH); sr.set(14, LOW); sr.set(13, LOW); sr.set(12, HIGH); } void TurnOnMR5() { if (debug == 1) { Serial.print(F("MR:5 ")); } sr.set(15, HIGH); sr.set(14, LOW); sr.set(13, LOW); sr.set(12, LOW); } void TurnOnMR4() { if (debug == 1) { Serial.print(F("MR:4 ")); } sr.set(15, LOW); sr.set(14, LOW); sr.set(13, LOW); sr.set(12, HIGH); } void TurnOnMR3() { if (debug == 1) { Serial.print(F("MR:3 ")); } sr.set(15, LOW); sr.set(14, LOW); sr.set(13, LOW); sr.set(12, LOW); } void TurnOnMR2() { if (debug == 1) { Serial.print(F("MR:2 ")); } sr.set(15, LOW); sr.set(14, LOW); sr.set(13, HIGH); sr.set(12, LOW); } void TurnOnMR1() { if (debug == 1) { Serial.print(F("MR:1 ")); } sr.set(15, HIGH); sr.set(14, HIGH); sr.set(13, LOW); sr.set(12, LOW); } void TurnOnMR0() { if (debug == 1) { Serial.print(F("MR:0 ")); } sr.set(15, LOW); sr.set(14, HIGH); sr.set(13, LOW); sr.set(12, LOW); } ////minutes - left //// void TurnOnML9() { if (debug == 1) { Serial.print(F("ML:9 ")); } sr.set(11, HIGH); sr.set(10, LOW); sr.set(9, HIGH); sr.set(8, LOW); } void TurnOnML8() { if (debug == 1) { Serial.print(F("ML:8 ")); } sr.set(11, HIGH); sr.set(10, LOW); sr.set(9, HIGH); sr.set(8, HIGH); } void TurnOnML7() { if (debug == 1) { Serial.print(F("ML:7 ")); } sr.set(11, LOW); sr.set(10, LOW); sr.set(9, HIGH); sr.set(8, HIGH); } void TurnOnML6() { if (debug == 1) { Serial.print(F("ML:6 ")); } sr.set(11, HIGH); sr.set(10, LOW); sr.set(9, LOW); sr.set(8, HIGH); } void TurnOnML5() { if (debug == 1) { Serial.print(F("ML:5 ")); } sr.set(11, HIGH); sr.set(10, LOW); sr.set(9, LOW); sr.set(8, LOW); } void TurnOnML4() { if (debug == 1) { Serial.print(F("ML:4 ")); } sr.set(11, LOW); sr.set(10, LOW); sr.set(9, LOW); sr.set(8, HIGH); } void TurnOnML3() { if (debug == 1) { Serial.print(F("ML:3 ")); } sr.set(11, LOW); sr.set(10, LOW); sr.set(9, LOW); sr.set(8, LOW); } void TurnOnML2() { if (debug == 1) { Serial.print(F("ML:2 ")); } sr.set(11, LOW); sr.set(10, LOW); sr.set(9, HIGH); sr.set(8, LOW); } void TurnOnML1() { if (debug == 1) { Serial.print(F("ML:1 ")); } sr.set(11, HIGH); sr.set(10, HIGH); sr.set(9, LOW); sr.set(8, LOW); } void TurnOnML0() { if (debug == 1) { Serial.print(F("ML:0 ")); } sr.set(11, LOW); sr.set(10, HIGH); sr.set(9, LOW); sr.set(8, LOW); } ////hours - right //// void TurnOnHR9() { if (debug == 1) { Serial.print(F("HR:9 ")); } sr.set(7, HIGH); sr.set(6, LOW); sr.set(5, HIGH); sr.set(4, LOW); } void TurnOnHR8() { if (debug == 1) { Serial.print(F("HR:8 ")); } sr.set(7, HIGH); sr.set(6, LOW); sr.set(5, HIGH); sr.set(4, HIGH); } void TurnOnHR7() { if (debug == 1) { Serial.print(F("HR:7 ")); } sr.set(7, LOW); sr.set(6, LOW); sr.set(5, HIGH); sr.set(4, HIGH); } void TurnOnHR6() { if (debug == 1) { Serial.print(F("HR:6 ")); } sr.set(7, HIGH); sr.set(6, LOW); sr.set(5, LOW); sr.set(4, HIGH); } void TurnOnHR5() { if (debug == 1) { Serial.print(F("HR:5 ")); } sr.set(7, HIGH); sr.set(6, LOW); sr.set(5, LOW); sr.set(4, LOW); } void TurnOnHR4() { if (debug == 1) { Serial.print(F("HR:4 ")); } sr.set(7, LOW); sr.set(6, LOW); sr.set(5, LOW); sr.set(4, HIGH); } void TurnOnHR3() { if (debug == 1) { Serial.print(F("HR:3 ")); } sr.set(7, LOW); sr.set(6, LOW); sr.set(5, LOW); sr.set(4, LOW); } void TurnOnHR2() { if (debug == 1) { Serial.print(F("HR:2 ")); } sr.set(7, LOW); sr.set(6, LOW); sr.set(5, HIGH); sr.set(4, LOW); } void TurnOnHR1() { if (debug == 1) { Serial.print(F("HR:1 ")); } sr.set(7, HIGH); sr.set(6, HIGH); sr.set(5, LOW); sr.set(4, LOW); } void TurnOnHR0() { if (debug == 1) { Serial.print(F("HR:0 ")); } sr.set(7, LOW); sr.set(6, HIGH); sr.set(5, LOW); sr.set(4, LOW); } ////hours - left //// void TurnOnHL9() { if (debug == 1) { Serial.print(F("NIXIE: HL:9 ")); } sr.set(3, HIGH); sr.set(2, LOW); sr.set(1, HIGH); sr.set(0, LOW); } void TurnOnHL8() { if (debug == 1) { Serial.print(F("NIXIE: HL:8 ")); } sr.set(3, HIGH); sr.set(2, LOW); sr.set(1, HIGH); sr.set(0, HIGH); } void TurnOnHL7() { if (debug == 1) { Serial.print(F("NIXIE: HL:7 ")); } sr.set(3, LOW); sr.set(2, LOW); sr.set(1, HIGH); sr.set(0, HIGH); } void TurnOnHL6() { if (debug == 1) { Serial.print(F("NIXIE: HL:6 ")); } sr.set(3, HIGH); sr.set(2, LOW); sr.set(1, LOW); sr.set(0, HIGH); } void TurnOnHL5() { if (debug == 1) { Serial.print(F("NIXIE: HL:5 ")); } sr.set(3, HIGH); sr.set(2, LOW); sr.set(1, LOW); sr.set(0, LOW); } void TurnOnHL4() { if (debug == 1) { Serial.print(F("NIXIE: HL:4 ")); } sr.set(3, LOW); sr.set(2, LOW); sr.set(1, LOW); sr.set(0, HIGH); } void TurnOnHL3() { if (debug == 1) { Serial.print(F("NIXIE: HL:3 ")); } sr.set(3, LOW); sr.set(2, LOW); sr.set(1, LOW); sr.set(0, LOW); } void TurnOnHL2() { if (debug == 1) { Serial.print(F("NIXIE: HL:2 ")); } sr.set(3, LOW); sr.set(2, LOW); sr.set(1, HIGH); sr.set(0, LOW); } void TurnOnHL1() { if (debug == 1) { Serial.print(F("NIXIE: HL:1 ")); } sr.set(3, HIGH); sr.set(2, HIGH); sr.set(1, LOW); sr.set(0, LOW); } void TurnOnHL0() { if (debug == 1) { Serial.print(F("NIXIE: HL:0 ")); } sr.set(3, LOW); sr.set(2, HIGH); sr.set(1, LOW); sr.set(0, LOW); } // Kept the following call functions but adapted the runhours for 24h clock /////////////////////runhours//////////////////////// void runhours() { if (counthour == 0) { TurnOnHL0(); } if (counthour == 1) { TurnOnHL1(); } if (counthour == 2) { TurnOnHL2(); } //////////Move by hour, R//////////////// if (hourtime == 0) { TurnOnHR0(); } if (hourtime == 1) { TurnOnHR1(); } if (hourtime == 2) { TurnOnHR2(); } if (hourtime == 3) { TurnOnHR3(); } if (hourtime == 4) { TurnOnHR4(); } if (hourtime == 5) { TurnOnHR5(); } if (hourtime == 6) { TurnOnHR6(); } if (hourtime == 7) { TurnOnHR7(); } if (hourtime == 8) { TurnOnHR8(); } if (hourtime == 9) { TurnOnHR9(); } } /////////////////////////////Minutes/////////////////////////// void runminutes() { if (countminute == 0) { TurnOnML0(); } if (countminute == 1) { TurnOnML1(); } if (countminute == 2) { TurnOnML2(); } if (countminute == 3) { TurnOnML3(); } if (countminute == 4) { TurnOnML4(); } if (countminute == 5) { TurnOnML5(); } //////////Move by minutes, R//////////////// if (minutetime == 0) { TurnOnMR0(); } if (minutetime == 1) { TurnOnMR1(); } if (minutetime == 2) { TurnOnMR2(); } if (minutetime == 3) { TurnOnMR3(); } if (minutetime == 4) { TurnOnMR4(); } if (minutetime == 5) { TurnOnMR5(); } if (minutetime == 6) { TurnOnMR6(); } if (minutetime == 7) { TurnOnMR7(); } if (minutetime == 8) { TurnOnMR8(); } if (minutetime == 9) { TurnOnMR9(); } } /////////////////Run second/////////////////// void runseconds() { if (count == 0) { TurnOnL0(); } if (count == 1) { TurnOnL1(); } if (count == 2) { TurnOnL2(); } if (count == 3) { TurnOnL3(); } if (count == 4) { TurnOnL4(); } if (count == 5) { TurnOnL5(); } //////////Move by second, R//////////////// if (secondtime == 0) { TurnOnR0(); } if (secondtime == 1) { TurnOnR1(); } if (secondtime == 2) { TurnOnR2(); } if (secondtime == 3) { TurnOnR3(); } if (secondtime == 4) { TurnOnR4(); } if (secondtime == 5) { TurnOnR5(); } if (secondtime == 6) { TurnOnR6(); } if (secondtime == 7) { TurnOnR7(); } if (secondtime == 8) { TurnOnR8(); } if (secondtime == 9) { TurnOnR9(); } } // removed AntiPoison function