/*
Md. Khairul Alam
Arduino PCB Binary Clock
Date: 1 January, 2023
*/
#include <DS3231M.h>
#include "LowPower.h"
DS3231M_Class DS3231M;
const int wake_up_pin = 2;
const int min_one = 6;
const int min_ten = 5;
const int hour_one = 4;
const int hour_ten = 3;
const int min_one_pos_one = 10;
const int min_one_pos_two = 9;
const int min_one_pos_four = 8;
const int min_one_pos_eight = 7;
const int min_ten_pos_one = 9;
const int min_ten_pos_two = 8;
const int min_ten_pos_four = 7;
const int hour_one_pos_one = 10;
const int hour_one_pos_two = 9;
const int hour_one_pos_four = 8;
const int hour_one_pos_eight = 7;
const int hour_ten_pos_one = 8;
const int hour_ten_pos_two = 7;
void wake_up()
{
}
void setup() {
// put your setup code here, to run once:
//DateTime(F(__DATE__), F(__TIME__))
pinMode(min_one, OUTPUT);
pinMode(min_ten, OUTPUT);
pinMode(hour_one, OUTPUT);
pinMode(hour_ten, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(wake_up_pin, INPUT_PULLUP);
Serial.begin(9600);
while (!DS3231M.begin()) // Initialize RTC communications
{
Serial.println("Not found");
delay(1000);
}
DS3231M.adjust(DateTime(2022, 12, 30, 12, 0, 0)); // Set to specific Date/Time
}
int hour_o = 0;
int hour_t = 0;
int minute_o = 0;
int minute_t = 0;
void loop() {
attachInterrupt(0, wake_up, LOW);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
// execution will start from here after wake up
// Disable external pin interrupt on wake up pin.
detachInterrupt(0);
delay(200);
DateTime now = DS3231M.now();
int hour = now.hour();
int minute = now.minute();
hour_o = hour%10;
hour_t = hour/10;
minute_o = minute%10;
minute_t = minute/10;
long startTime = millis();
while((millis() - startTime)<10000){
min_one_display(minute_o);
delay(5);
min_ten_display(minute_t);
delay(5);
hour_one_display(hour_o);
delay(5);
hour_ten_display(hour_t);
delay(5);
}
digitalWrite(min_one, LOW);
digitalWrite(min_ten, LOW);
digitalWrite(hour_one, LOW);
digitalWrite(hour_ten, LOW);
}
void min_one_display(int min_one_value){
digitalWrite(min_one, HIGH);
digitalWrite(min_ten, LOW);
digitalWrite(hour_one, LOW);
digitalWrite(hour_ten, LOW);
switch(min_one_value){
case 0:
digitalWrite(min_one_pos_one, HIGH);
digitalWrite(min_one_pos_two, HIGH);
digitalWrite(min_one_pos_four, HIGH);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 1:
digitalWrite(min_one_pos_one, LOW);
digitalWrite(min_one_pos_two, HIGH);
digitalWrite(min_one_pos_four, HIGH);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 2:
digitalWrite(min_one_pos_one, HIGH);
digitalWrite(min_one_pos_two, LOW);
digitalWrite(min_one_pos_four, HIGH);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 3:
digitalWrite(min_one_pos_one, LOW);
digitalWrite(min_one_pos_two, LOW);
digitalWrite(min_one_pos_four, HIGH);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 4:
digitalWrite(min_one_pos_one, HIGH);
digitalWrite(min_one_pos_two, HIGH);
digitalWrite(min_one_pos_four, LOW);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 5:
digitalWrite(min_one_pos_one, LOW);
digitalWrite(min_one_pos_two, HIGH);
digitalWrite(min_one_pos_four, LOW);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 6:
digitalWrite(min_one_pos_one, HIGH);
digitalWrite(min_one_pos_two, LOW);
digitalWrite(min_one_pos_four, LOW);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 7:
digitalWrite(min_one_pos_one, LOW);
digitalWrite(min_one_pos_two, LOW);
digitalWrite(min_one_pos_four, LOW);
digitalWrite(min_one_pos_eight, HIGH);
break;
case 8:
digitalWrite(min_one_pos_one, HIGH);
digitalWrite(min_one_pos_two, HIGH);
digitalWrite(min_one_pos_four, HIGH);
digitalWrite(min_one_pos_eight, LOW);
break;
case 9:
digitalWrite(min_one_pos_one, LOW);
digitalWrite(min_one_pos_two, HIGH);
digitalWrite(min_one_pos_four, HIGH);
digitalWrite(min_one_pos_eight, LOW);
break;
}
}
void hour_one_display(int hour_one_value){
digitalWrite(min_one, LOW);
digitalWrite(min_ten, LOW);
digitalWrite(hour_one, HIGH);
digitalWrite(hour_ten, LOW);
switch(hour_one_value){
case 0:
digitalWrite(hour_one_pos_one, HIGH);
digitalWrite(hour_one_pos_two, HIGH);
digitalWrite(hour_one_pos_four, HIGH);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 1:
digitalWrite(hour_one_pos_one, LOW);
digitalWrite(hour_one_pos_two, HIGH);
digitalWrite(hour_one_pos_four, HIGH);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 2:
digitalWrite(hour_one_pos_one, HIGH);
digitalWrite(hour_one_pos_two, LOW);
digitalWrite(hour_one_pos_four, HIGH);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 3:
digitalWrite(hour_one_pos_one, LOW);
digitalWrite(hour_one_pos_two, LOW);
digitalWrite(hour_one_pos_four, HIGH);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 4:
digitalWrite(hour_one_pos_one, HIGH);
digitalWrite(hour_one_pos_two, HIGH);
digitalWrite(hour_one_pos_four, LOW);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 5:
digitalWrite(hour_one_pos_one, LOW);
digitalWrite(hour_one_pos_two, HIGH);
digitalWrite(hour_one_pos_four, LOW);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 6:
digitalWrite(hour_one_pos_one, HIGH);
digitalWrite(hour_one_pos_two, LOW);
digitalWrite(hour_one_pos_four, LOW);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 7:
digitalWrite(hour_one_pos_one, LOW);
digitalWrite(hour_one_pos_two, LOW);
digitalWrite(hour_one_pos_four, LOW);
digitalWrite(hour_one_pos_eight, HIGH);
break;
case 8:
digitalWrite(hour_one_pos_one, HIGH);
digitalWrite(hour_one_pos_two, HIGH);
digitalWrite(hour_one_pos_four, HIGH);
digitalWrite(hour_one_pos_eight, LOW);
break;
case 9:
digitalWrite(hour_one_pos_one, LOW);
digitalWrite(hour_one_pos_two, HIGH);
digitalWrite(hour_one_pos_four, HIGH);
digitalWrite(hour_one_pos_eight, LOW);
break;
}
}
void min_ten_display(int min_ten_value){
digitalWrite(min_one, LOW);
digitalWrite(min_ten, HIGH);
digitalWrite(hour_one, LOW);
digitalWrite(hour_ten, LOW);
switch(min_ten_value){
case 0:
digitalWrite(min_ten_pos_one, HIGH);
digitalWrite(min_ten_pos_two, HIGH);
digitalWrite(min_ten_pos_four, HIGH);
break;
case 1:
digitalWrite(min_ten_pos_one, LOW);
digitalWrite(min_ten_pos_two, HIGH);
digitalWrite(min_ten_pos_four, HIGH);
break;
case 2:
digitalWrite(min_ten_pos_one, HIGH);
digitalWrite(min_ten_pos_two, LOW);
digitalWrite(min_ten_pos_four, HIGH);
break;
case 3:
digitalWrite(min_ten_pos_one, LOW);
digitalWrite(min_ten_pos_two, LOW);
digitalWrite(min_ten_pos_four, HIGH);
break;
case 4:
digitalWrite(min_ten_pos_one, HIGH);
digitalWrite(min_ten_pos_two, HIGH);
digitalWrite(min_ten_pos_four, LOW);
break;
case 5:
digitalWrite(min_ten_pos_one, LOW);
digitalWrite(min_ten_pos_two, HIGH);
digitalWrite(min_ten_pos_four, LOW);
break;
}
}
void hour_ten_display(int hour_ten_value){
digitalWrite(min_one, LOW);
digitalWrite(min_ten, LOW);
digitalWrite(hour_one, LOW);
digitalWrite(hour_ten, HIGH);
switch(hour_ten_value){
case 0:
digitalWrite(hour_ten_pos_one, HIGH);
digitalWrite(hour_ten_pos_two, HIGH);
break;
case 1:
digitalWrite(hour_ten_pos_one, LOW);
digitalWrite(hour_ten_pos_two, HIGH);
break;
case 2:
digitalWrite(hour_ten_pos_one, HIGH);
digitalWrite(hour_ten_pos_two, LOW);
break;
}
}
Comments
Please log in or sign up to comment.