Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // LED Binary clock by x2Jiggy.com 11/06/2014
- /* Sketch queries a DS1307 RTC for the current time then uses
- those values to switch an array of LEDs to display the time in
- binary format */
- #include <Wire.h> // Communicate with the RTC over I2C
- #include "RTClib.h" // Adafruit DS1307 Real Time Clock Library
- /* Static Variables */
- static int h1 = A0;
- static int h2 = 2;
- static int h3 = 3;
- static int h4 = 4;
- static int h5 = 5;
- static int h6 = 6;
- static int m1 = 7;
- static int m2 = 8;
- static int m3 = 9;
- static int m4 = 10;
- static int m5 = 11;
- static int m6 = 12;
- static int m7 = 13;
- RTC_DS1307 RTC;
- void setup () {
- /* Set inputs and outputs */
- pinMode(h1, OUTPUT);
- pinMode(h2, OUTPUT);
- pinMode(h3, OUTPUT);
- pinMode(h4, OUTPUT);
- pinMode(h5, OUTPUT);
- pinMode(h6, OUTPUT);
- pinMode(m1, OUTPUT);
- pinMode(m2, OUTPUT);
- pinMode(m3, OUTPUT);
- pinMode(m4, OUTPUT);
- pinMode(m5, OUTPUT);
- pinMode(m6, OUTPUT);
- pinMode(m7, OUTPUT);
- /* Start 2IC and RTC */
- //Serial.begin(9600);
- Wire.begin();
- RTC.begin();
- }
- void loop () {
- /* Get current time */
- DateTime now = RTC.now();
- int tHour = now.hour();
- int tMin = now.minute();
- /* Set First Hour Digit */
- if (tHour < 10){
- digitalWrite(h1, LOW);
- digitalWrite(h2, LOW);
- }
- else if (tHour < 20) {
- digitalWrite(h1, HIGH);
- digitalWrite(h2, LOW);
- }
- else {
- digitalWrite(h1, LOW);
- digitalWrite(h2, HIGH);
- }
- /* Set Second Hour Digit */
- // Reduce Hour int to second digit only
- int hDigit;
- if (tHour > 20) hDigit = tHour - 20;
- else if (tHour > 10) hDigit = tHour - 10;
- else hDigit = tHour;
- // Check digit against binary value of each LED and switch accordingly
- if (hDigit != 0 && hDigit != 10) {
- if (hDigit >= 8) {
- hDigit = hDigit - 8;
- digitalWrite(h6, HIGH);
- }
- else digitalWrite(h6, LOW);
- if (hDigit >= 4) {
- hDigit = hDigit - 4;
- digitalWrite(h5, HIGH);
- }
- else digitalWrite(h5, LOW);
- if (hDigit >= 2) {
- hDigit = hDigit - 2;
- digitalWrite(h4, HIGH);
- }
- else digitalWrite(h4, LOW);
- if (hDigit >= 1) digitalWrite(h3, HIGH);
- else digitalWrite(h3, LOW);
- }
- else {
- digitalWrite(h6, LOW);
- digitalWrite(h5, LOW);
- digitalWrite(h4, LOW);
- digitalWrite(h3, LOW);
- }
- /* Set First Minute Digit */
- if (tMin >= 10) {
- int mDigit1 = tMin - (tMin % 10); // Remove remainder making value divisible by 10
- mDigit1 = mDigit1 / 10; // Divide by 10 to get first minute digit
- if (mDigit1 >= 4) {
- mDigit1 = mDigit1 - 4;
- digitalWrite(m3, HIGH);
- }
- else digitalWrite(m3, LOW);
- if (mDigit1 >= 2) {
- mDigit1 = mDigit1 - 2;
- digitalWrite(m2, HIGH);
- }
- else digitalWrite(m2, LOW);
- if (mDigit1 >= 1) digitalWrite(m1, HIGH);
- else digitalWrite(m1, LOW);
- }
- else {
- digitalWrite(m1, LOW);
- digitalWrite(m2, LOW);
- digitalWrite(m3, LOW);
- }
- /* Set Second Minute Digit */
- int mDigit2; // Reduce minute int to second digit only
- if (tMin > 50) mDigit2 = tMin - 50;
- else if (tMin > 40) mDigit2 = tMin - 40;
- else if (tMin > 30) mDigit2 = tMin - 30;
- else if (tMin > 20) mDigit2 = tMin - 20;
- else if (tMin > 10) mDigit2 = tMin - 10;
- else mDigit2 = tMin;
- // Check digit against binary value of each LED and switch accordingly
- if (mDigit2 != 0 && mDigit2 != 10) {
- if (mDigit2 >= 8) {
- mDigit2 = mDigit2 - 8;
- digitalWrite(m7, HIGH);
- }
- else digitalWrite(m7, LOW);
- if (mDigit2 >= 4) {
- mDigit2 = mDigit2 - 4;
- digitalWrite(m6, HIGH);
- }
- else digitalWrite(m6, LOW);
- if (mDigit2 >= 2) {
- mDigit2 = mDigit2 - 2;
- digitalWrite(m5, HIGH);
- }
- else digitalWrite(m5, LOW);
- if (mDigit2 >= 1) digitalWrite(m4, HIGH);
- else digitalWrite(m4, LOW);
- }
- else {
- digitalWrite(m4, LOW);
- digitalWrite(m5, LOW);
- digitalWrite(m6, LOW);
- digitalWrite(m7, LOW);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement