#include <Wire.h>
#include <RTClib.h>
#include <SevSeg.h>
#define digit1 2
#define digit2 3
#define digit3 4
#define digit4 5
#define A 6
#define B 7
#define C 8
#define D 9
#define E 10
#define F 11
#define G 12
#define DP 13
#define incHourButtonPin 0
#define incMinuteButtonPin 1
#define decHourButtonPin 14
#define decMinuteButtonPin 15
RTC_DS1307 rtc;
SevSeg sevseg;
int hours = 0;
int minutes = 0;
void setup() {
// put your setup code here, to run once:
Wire.begin();
rtc.begin();
byte numDigits = 4;
byte digitPins[] = {digit1, digit2, digit3, digit4};
byte segmentPins[] = {A, B, C, D, E, F, G, DP};
bool resistorsOnSegments = false;
bool updateWithDelaysIn = true;
byte hardwareConfig = COMMON_ANODE;
sevseg.begin(hardwareConfig,
numDigits,
digitPins, segmentPins, resistorsOnSegments);
pinMode(incHourButtonPin, INPUT);
pinMode(incMinuteButtonPin, INPUT);
pinMode(decHourButtonPin, INPUT);
pinMode(decMinuteButtonPin, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
DateTime now = rtc.now();
hours = now.hour();
minutes = now.minute();
sevseg.setNumber(hours * 100 + minutes);
sevseg.refreshDisplay();
if (digitalRead(incHourButtonPin) == HIGH) {
while (digitalRead(incHourButtonPin) == HIGH) {
delay(300);
hours++;
if (hours > 23)
{
hours = 0;
minutes = 0;
}
}
rtc.adjust(DateTime(now.year(), now.month(),
now.day(), hours, minutes, 0));
}
if (digitalRead(incMinuteButtonPin) == HIGH) {
while (digitalRead(incMinuteButtonPin) == HIGH) {
delay(300);
minutes++;
if (minutes > 59) {
minutes = 0;
hours++;
if (hours > 23) hours = 0;
}
}
rtc.adjust(DateTime(now.year(), now.month(),
now.day(), hours, minutes, 0));
}
if (digitalRead(decHourButtonPin) == HIGH) {
while (digitalRead(decHourButtonPin) == HIGH) {
delay(300);
hours--;
if (hours < 0 && minutes > 0) hours = 0;
}
rtc.adjust(DateTime(now.year(), now.month(),
now.day(), hours, minutes, 0));
}
if (digitalRead(decMinuteButtonPin) == HIGH) {
while (digitalRead(decMinuteButtonPin) == HIGH) {
delay(300);
minutes--;
if (minutes < 0)
{
minutes = 59;
hours--;
}
}
rtc.adjust(DateTime(now.year(), now.month(),
now.day(), hours, minutes, 0));
}
delay(10);
}