#include "Arduino.h"
#include "uRTCLib.h"
uRTCLib rtc(0x68);
const int pinClockMode = A0;
const int pinMinus = A1;
const int pinPlus = A2;
const int pinSet = A3;
const int pinAM = A4;
const int pinPM = A5;
const int pinM1 = 0;
const int pinM2 = 1;
const int pinM4 = 2;
const int pinM8 = 3;
const int pinM10 = 4;
const int pinM20 = 5;
const int pinM40 = 6;
const int pinH1 = 7;
const int pinH2 = 8;
const int pinH4 = 9;
const int pinH8 = 10;
const int pinH10 = 11;
const int pinH20 = 12;
// States
const int STATE_RESET = 0;
const int STATE_SET_HOURS = 1;
const int STATE_SET_MINUTES = 2;
const int STATE_SET_MODE = 3;
const int STATE_RUN = 4;
// Clock Modes
const int MODE_12H = 0;
const int MODE_24H = 1;
// Buttons
const int MODE = 0;
const int PLUS = 1;
const int MINUS = 2;
const int SET = 3;
int seconds = 0;
int minutes = 0;
int hours = 0;
void writeTime(int hours, int minutes, int mode, int overrideHours = HIGH, int overrideMinutes = HIGH, int overrideMode = HIGH);
void setup() {
pinMode(pinClockMode, INPUT);
pinMode(pinMinus, INPUT);
pinMode(pinPlus, INPUT);
pinMode(pinSet, INPUT);
pinMode(pinAM, OUTPUT);
pinMode(pinPM, OUTPUT);
for (int i = pinM1; i <= pinH20; i++)
{
pinMode(i, OUTPUT);
}
// put your setup code here, to run once:
Serial.begin(9600);
delay(3000);
URTCLIB_WIRE.begin();
rtc.set(0, 0, 0, 5, 13, 1, 22);
delay(1000);
}
void loop() {
// Serial.begin(9600);
rtc.refresh();
hours = rtc.hour();
minutes = rtc.minute();
seconds = rtc.second();
// Serial.end();
writeTime(hours, seconds, MODE_24H);
digitalWrite(pinAM, HIGH);
digitalWrite(pinPM, LOW);
// Serial.print("Current Date & Time: ");
// Serial.print(rtc.year());
// Serial.print('/');
// Serial.print(rtc.month());
// Serial.print('/');
// Serial.print(rtc.day());
// Serial.print(" ");
// Serial.print(hours);
// Serial.print(':');
// Serial.print(minutes);
// Serial.print(':');
// Serial.println(seconds);
// delay(1000);
}
void writeTime(int hours, int minutes, int mode, int overrideHours, int overrideMinutes, int overrideMode) {
int modHours = hours;
if (mode == MODE_12H) {
modHours = hours % 12;
if (modHours == 0) {
modHours = 12;
}
}
digitalWrite(pinM1, ((minutes % 10) & 1) * overrideMinutes);
digitalWrite(pinM2, ((minutes % 10) & 2) * overrideMinutes);
digitalWrite(pinM4, ((minutes % 10) & 4) * overrideMinutes);
digitalWrite(pinM8, ((minutes % 10) & 8) * overrideMinutes);
digitalWrite(pinM10, ((minutes / 10) & 1) * overrideMinutes);
digitalWrite(pinM20, ((minutes / 10) & 2) * overrideMinutes);
digitalWrite(pinM40, ((minutes / 10) & 4) * overrideMinutes);
digitalWrite(pinH1, ((modHours % 10) & 1) * overrideHours);
digitalWrite(pinH2, ((modHours % 10) & 2) * overrideHours);
digitalWrite(pinH4, ((modHours % 10) & 4) * overrideHours);
digitalWrite(pinH8, ((modHours % 10) & 8) * overrideHours);
digitalWrite(pinH10, ((modHours / 10) & 1) * overrideHours);
digitalWrite(pinH20, ((modHours / 10) & 2) * overrideHours);
int stateAM = LOW;
int statePM = LOW;
if (mode == MODE_12H) {
if (hours < 12) {
stateAM = HIGH;
} else {
statePM = HIGH;
}
}
digitalWrite(pinAM, stateAM * overrideMode);
digitalWrite(pinPM, statePM * overrideMode);
// if (mode == MODE_12H) {
// sprintf(logBuffer, "12H Time: %d:%d", modHours, minutes);
// } else {
// sprintf(logBuffer, "24H Time: %d:%d", modHours, minutes);
// }
// log(logBuffer);
}
Set
+
-
Mode
Minutes
Hours
PM
AM