/**
Arduino Digital Alarm Clock
Copyright (C) 2020, Uri Shaked.
Released under the MIT License.
*/
#include <SevSeg.h>
#include "Clock.h"
#include "config.h"
const int COLON_PIN = 13;
Clock clock;
SevSeg sevseg;
void setColon(bool value) {
digitalWrite(COLON_PIN, value ? LOW : HIGH);
}
byte getHex(byte digit) {
byte digitCodes[12] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,
0x7D, 0x07, 0xFF, 0x6F, 0x76, 0x79
};
return digitCodes[digit];
}
void displayTime() {
DateTime now = clock.now();
byte digit1 = getHex(now.hour() < 12 ? 0 : 1);
byte digit2 = getHex(now.hour() % 12);
byte digit3 = getHex(floor((now.minute() * 60 + now.second()) / 72 / 12));
byte digit4 = getHex(floor((now.minute() * 60 + now.second()) / 72 % 12));
byte segs[4] = { digit1, digit2, digit3, digit4 };
sevseg.setSegments(segs);
setColon(true);
}
void setup() {
Serial.begin(115200);
clock.begin();
pinMode(COLON_PIN, OUTPUT);
byte digits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12};
bool resistorsOnSegments = false;
bool updateWithDelays = false;
bool leadingZeros = true;
bool disableDecPoint = true;
sevseg.begin(DISPLAY_TYPE, digits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void loop() {
sevseg.refreshDisplay();
displayTime();
}