/* Ahmed Arduino Clock Instructable Step 2 Part 2 - Setting time with date stamp. Uses Adafruit 7-segment display and libraries: https://learn.adafruit.com/adafruit-led-backpack/0-dot-56-seven-segment-backpack And DS1307 Real Time Clock breakout board kit and libraries: https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit MakersBox.blogspot.com 648.ken@gmail.com */ #include "Wire.h" #include "RTClib.h" #include "Adafruit_LEDBackpack.h" #include "Adafruit_GFX.h" Adafruit_7segment matrix = Adafruit_7segment(); // Get upload date time DateTime uploadDateTime = DateTime(__DATE__, __TIME__); // time variables long lastMillis; int hours = uploadDateTime.hour(); int minutes = uploadDateTime.minute(); int seconds = uploadDateTime.second(); void setup() { Serial.begin(9600); // Open channel to serial console Serial.println("Arduino Clock Step 2 Part 2"); Serial.println("Using time/date stamp to set time!"); matrix.begin(0x70); // Start display } void loop() { long curMillis = millis(); // get current counter in milliseconds if (curMillis > (lastMillis + 1000)){ // If one second has passed: lastMillis = lastMillis + 1000; seconds = seconds + 1; // increment seconds if (seconds > 59){ seconds = 0; minutes = minutes + 1; // increment minutes if (minutes > 59){ minutes = 0; hours = hours + 1; // increment hours if (hours > 23){ hours = 0; } } } // Display time on serial console if (hours < 10){ Serial.print(" "); // pad hours } Serial.print(hours); Serial.print(":"); if (minutes < 10){ Serial.print("0"); // pad minutes} } Serial.print(minutes); Serial.print(":"); if (seconds < 10){ Serial.print("0"); // pad seconds } Serial.println(seconds); // Break time into individual digits for display int h1 = hours / 10; int h2 = hours - h1 * 10; int m1 = minutes / 10; int m2 = minutes - m1 * 10; int s1 = seconds / 10; int s2 = seconds - s1 * 10; // Send data to display if (h1){ matrix.writeDigitNum(0, h1, false); } else{ matrix.writeDigitRaw(0, 0); // blank instead of zero } matrix.writeDigitNum(1, h2, false); matrix.drawColon(seconds % 2); // on if second is odd matrix.writeDigitNum(3, m1, false); matrix.writeDigitNum(4, m2, false); matrix.writeDisplay(); } }