Arduino Binary Clock (hours, minutes and seconds)

Arduino Binary Clock (3)

Hello everyone; I was looking for this project for a long time.  Finally I it it together with a lot of effort.  For this project you will need:Arduino Binary Clock (3)

[box color=”#985D00″ bg=”#FFF8CB” font=”verdana” fontsize=”14 ” radius=”20 ” border=”#985D12″ float=”right” head=”Major Components in Project” headbg=”#FFEB70″ headcolor=”#985D00″]
1-   Arduino Uno ($30 from Radio Shack)
2-   RTC DS1307 (like $2 from EBay)
3-   2 Shift Registers 74HC595 (like $1 eachh from Ebay)
4-   16 leds
5-   16 330 hom resistors
6-   Breadboards
7-   jumpers

The clock will display the hours using the first 4 leds, then the minutes using the next 6 leds and finally the seconds using the las 6 leds.[/box]

There is a better explanation from the original project here (as well as other cool projects):

Step 1: The schematics

The schematics (2)

Here is the design; mounted in two full breadboards! (Make sure you’ve got all the connections right, fail to to so will give you a few days of headache; it happened to me!)

Step 2: The code (from by M Atkinson)

//orignal code made by M Atkinson, please check his website
//few minor modifications made by

#include <Wire.h>
#include “RTClib.h”

int datapin = 2;
int clockpin = 3;
int latchpin = 4;
int datapin2 = 8;
int clockpin2 = 9;
int latchpin2= 10;

void setup()

if (! RTC.isrunning()) {
Serial.println(“RTC is NOT running!”);
// following line sets the RTC to the date & time this sketch was compiled
//RTC.adjust(DateTime(__DATE__, __TIME__));

pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(latchpin, OUTPUT);
pinMode(datapin2, OUTPUT);
pinMode(clockpin2, OUTPUT);
pinMode(latchpin2, OUTPUT);

void loop()

DateTime now =;
// All used for checking the time of the clock
// This section can be removed when everything is working
Serial.print(now.hour(), DEC);
Serial.print(now.minute(), DEC);
Serial.print(now.second(), DEC);
// End of section that can be removed

int mins = now.minute();
int secs = now.second();
int hr = now.hour();
// convert to 12 hour time
if (hr>12)
hr = hr-12;

// variables to describe pattern of on lights
byte data1 = 0;
byte data2 = 0;

// encode the time
// hr = 1st four bits controlled by the first shift register
for (int i =0;i<4;i++)
if (bitRead(hr,i)==1)
// mins on the first shift register (last 4 leds)
for (int i =2;i<6;i++)
if (bitRead(mins,i)==1)
// mins on the second shift register (first 2 leds)
for (int i =0;i<2;i++)
if (bitRead(mins,i)==1)
// seconds, controlled by the second shift register (all 6 leds)
for (int i =2;i<8;i++)
if (bitRead(secs,i-2)==1)
// output the information
// a pause every one second for the serial monitor output


void writeByte(byte data, byte set)
int d,c,l;
if (set==1)
d = 2;
c = 3;
l = 4;
else if (set==2)
d = 8;
c = 9;
l = 10;
shiftOut(d, c, MSBFIRST, data);
// toggle the latch pin so that the data appears as an output
digitalWrite(l, HIGH);
digitalWrite(l, LOW);

Step 3: The RTClib

For this project you will need the RTClib in order to run the program properly.  You can download it here:

Your RTC will come loaded with the time; sometimes with local time from China; to change the time, go to this website, connect your RTC (the website will show you the diagram) and run the following code:

//Arduino 1.0+ Only
//Arduino 1.0+ Only

#include “Wire.h”
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527

void setup(){

void loop(){

Read more: Arduino Binary Clock (hours, minutes and seconds)

Leave a Comment

Your email address will not be published. Required fields are marked *