/************************************************************ * Digital nerd watch program * * Original program by othermachine on instructables.com * * Re-programmed by JRV31 * ************************************************************/ int greenLED = 1; // Pin for green LED. int yellowLED = 4; // Pin for yellow LED. int button = 0; // Pin for pushbutton switch. int blinkDelay = 350; // Length of blink in milleseconds. long calibrate = 313250; // Five minutes. long starttime; int hour = 0; int minute = 0; /************************************************************ * setup() function - required ************************************************************/ void setup() { pinMode(greenLED, OUTPUT); // Set LED pins to output. pinMode(yellowLED, OUTPUT); pinMode(button, INPUT_PULLUP); // Set button pin to input with pullup digitalWrite(yellowLED, HIGH); // Initial state of LEDs is off. digitalWrite(greenLED, HIGH); settime(); // function to set the time. starttime = millis(); // Mark starting time. while((millis()-starttime)<(calibrate/2)) // Wait 2 1/2 minutes before // advancing time for the first time. { if(digitalRead(button)==LOW) // Displaying time works { // during first 2 1/2 minutes. displaytime(hour); delay(blinkDelay*3); displaytime(minute); } } starttime = millis(); // 2 1/2 minuter have go by. minute++; // Advance the time. if(minute==12) hour++; if(minute>12) { minute = 1; if(hour>12) hour = 1; } } /************************************************************ * loop() function - required ************************************************************/ void loop() { if((millis()-starttime)>calibrate) // Advance time every 5 minutes. { starttime = millis(); minute++; if(minute==12) hour++; if(minute>12) { minute = 1; if(hour>12) hour = 1; } } if(digitalRead(button)==LOW) // Display time if button pressed. { displaytime(hour); delay(blinkDelay*3); displaytime(minute); } } /***************************************************************** * settime() function called by setup() to set the clock at start. *****************************************************************/ void settime() { int i; delay(3000); // Wait three seconds after start. i=0; while(i==0) { digitalWrite(greenLED, LOW); // Green LED blinks, starttime = millis(); while((millis()-starttime)<500) // count the blinks and { if(digitalRead(button)==LOW) i++; // press the button when } digitalWrite(greenLED, HIGH); // count equals hour hand. starttime = millis(); while((millis()-starttime)<500) { if(digitalRead(button)==LOW) i++; } hour++; } delay(3000); // Wait 3 seconds between hour and minute. i=0; while(i==0) { digitalWrite(yellowLED, LOW); // Yellow LED blinks, starttime = millis(); while((millis()-starttime)<500) // count the blinks { if(digitalRead(button)==LOW) i++; // press the button when } digitalWrite(yellowLED, HIGH); // count equals minute hand. starttime = millis(); while((millis()-starttime)<500) { if(digitalRead(button)==LOW) i++; } minute++; } if(hour>11) hour = 11; // Set hour to 11 and minute if(minute>12) minute = 12; if(hour==0) hour = 11; // to 12 if over or zero. if(minute==0) minute =12; while(digitalRead(button)==HIGH); // Wait for button press to start. while(digitalRead(button)==LOW); // debounce } /************************************************************ * displaytime() function displays the time. ************************************************************/ void displaytime(int hhmm) { if(hhmm>7) // If number to display is > 7 { blinker(greenLED); // blink green LED and hhmm-=8; // subtract eight. } else blinker(yellowLED); // else blink yellow LED. if(hhmm>3) { blinker(greenLED); hhmm-=4; } else blinker(yellowLED); if(hhmm>1) { blinker(greenLED); hhmm-=2; } else blinker(yellowLED); if(hhmm==1) { blinker(greenLED); } else blinker(yellowLED); } /************************************************************ * blinker() blinks one LED once. ************************************************************/ void blinker(int LED) { digitalWrite(LED, LOW); // Turn LED on. delay(blinkDelay); digitalWrite(LED, HIGH); // Turn LED off. delay(blinkDelay); }