int onTime = 1000; String strbuff; int digitPins[4] = {13,12,14,27}; void allDigitsOff(){ digitalWrite(13,0); digitalWrite(12,0); digitalWrite(14,0); digitalWrite(27,0); } void allSegmentsOff(){ digitalWrite(18,0); digitalWrite(19,0); digitalWrite(5,0); digitalWrite(2,0); digitalWrite(17,0); digitalWrite(4,0); digitalWrite(16,0); } void drawChar(char buffer, int index){ int digitPin = digitPins[index]; allDigitsOff(); digitalWrite(digitPin,1); switch(buffer){ case '0': digitalWrite(18,1); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,1); digitalWrite(17,1); digitalWrite(4,1); digitalWrite(16,0); break; case '1': digitalWrite(18,0); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,0); digitalWrite(17,0); digitalWrite(4,0); digitalWrite(16,0); break; case '2': digitalWrite(18,1); digitalWrite(19,1); digitalWrite(5,0); digitalWrite(2,1); digitalWrite(17,1); digitalWrite(4,0); digitalWrite(16,1); break; case '3': digitalWrite(18,1); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,1); digitalWrite(17,0); digitalWrite(4,0); digitalWrite(16,1); break; case '4': digitalWrite(18,0); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,0); digitalWrite(17,0); digitalWrite(4,1); digitalWrite(16,1); break; case '5': digitalWrite(18,1); digitalWrite(19,0); digitalWrite(5,1); digitalWrite(2,1); digitalWrite(17,0); digitalWrite(4,1); digitalWrite(16,1); break; case '6': digitalWrite(18,1); digitalWrite(19,0); digitalWrite(5,1); digitalWrite(2,1); digitalWrite(17,1); digitalWrite(4,1); digitalWrite(16,1); break; case '7': digitalWrite(18,1); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,0); digitalWrite(17,0); digitalWrite(4,0); digitalWrite(16,0); break; case '8': digitalWrite(18,1); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,1); digitalWrite(17,1); digitalWrite(4,1); digitalWrite(16,1); break; case '9': digitalWrite(18,1); digitalWrite(19,1); digitalWrite(5,1); digitalWrite(2,1); digitalWrite(17,0); digitalWrite(4,1); digitalWrite(16,1); break; } } void drawStringd(String buffer){ drawChar(buffer[0],3); delayMicroseconds(onTime); allSegmentsOff(); drawChar(buffer[1],2); delayMicroseconds(onTime); allSegmentsOff(); drawChar(buffer[2],1); delayMicroseconds(onTime); allSegmentsOff(); drawChar(buffer[3],0); delayMicroseconds(onTime); allSegmentsOff(); } #define timescale 1000 bool ispm; unsigned long startmillis = 0; int startsecs = 0; int startmins = 0; int starthrs = 0; unsigned long secs; unsigned long mins; unsigned long hrs; unsigned long prevsecs; unsigned long timeout; bool adjust = 0; int setLevel = 0; void setup() { // put your setup code here, to run once: pinMode(18,OUTPUT); pinMode(19,OUTPUT); pinMode(5,OUTPUT); pinMode(2,OUTPUT); pinMode(17,OUTPUT); pinMode(4,OUTPUT); pinMode(16,OUTPUT); pinMode(15,OUTPUT); pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(14,OUTPUT); pinMode(27,OUTPUT); pinMode(1,INPUT_PULLUP); allDigitsOff(); allSegmentsOff(); } void loop() { if(!adjust){ secs = ((millis() - startmillis) / timescale); secs += (startsecs) + (startmins * 60) + (starthrs * 3600); mins = secs / 60; hrs = mins / 60; // Only update display if time has changed and the display is on if (secs != prevsecs){ prevsecs = secs; secs %= 60; mins %= 60; hrs %= 24; if (hrs > 12){ ispm = 1; hrs -= 12; } else ispm = 0; if (hrs == 0) hrs = 12; strbuff = ""; if(hrs < 10) strbuff += "-"; strbuff += String(hrs); if(mins < 10) strbuff += "0"; strbuff += String(mins); digitalWrite(15, ((secs % 2) == 0)); } if(!digitalRead(1)){ adjust = true; setLevel = 0; startsecs = 0; startmins = 0; starthrs = 0; digitalWrite(15,1); while(!digitalRead(1)); } } if(adjust){ if(setLevel == 0){ strbuff = "1-" + String(starthrs); if(!digitalRead(1)){ timeout = millis(); while(!digitalRead(1) && (millis() - 2000) < timeout); if(digitalRead(1)){ starthrs++; if(starthrs == 24) starthrs = 0; } else{ digitalWrite(15,0); setLevel = 1; while(!digitalRead(1)); digitalWrite(15,1); } } } if(setLevel == 1){ strbuff = "2-" + String(startmins); if(!digitalRead(1)){ timeout = millis(); while(!digitalRead(1) && (millis() - 2000) < timeout); if(digitalRead(1)){ startmins++; if(startmins == 60) startmins = 0; } else{ digitalWrite(15,0); setLevel = 2; while(!digitalRead(1)); digitalWrite(15,1); } } } if(setLevel == 2){ strbuff = "3-" + String(startsecs); if(!digitalRead(1)){ timeout = millis(); while(!digitalRead(1) && (millis() - 2000) < timeout); if(digitalRead(1)){ startsecs++; if(startsecs == 60) startsecs = 0; } else{ digitalWrite(15,0); adjust = 0; startmillis = millis(); while(!digitalRead(1)); digitalWrite(15,1); } } } } drawStringd(strbuff); }