/*
diagram.json is really buggy at the moment.
Expect bugs as I can't operate it right now.
*/
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
const int segmentPins[] = {8, 9, 10, 11, 12, 13, A0, A1};
const int digitPins[] = {2, 3, 4, 5};
const int colonPin = 6;
const int sqwPin = 7;
const byte digitPatterns[10] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
void setup() {
Wire.begin();
rtc.begin();
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW);
}
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], LOW);
}
pinMode(colonPin, OUTPUT);
digitalWrite(colonPin, LOW);
pinMode(sqwPin, INPUT); // Setting SQW pin as input
}
void loop() {
DateTime now = rtc.now();
int hours = now.hour();
int minutes = now.minute();
displayNumber(hours, minutes);
delay(500);
toggleColon();
delay(500);
int sqwState = digitalRead(sqwPin); // Read the state of the SQW pin
Serial.print("SQW State: ");
Serial.println(sqwState);
}
void displayNumber(int hours, int minutes) {
int digits[4] = {
hours / 10,
hours % 10,
minutes / 10,
minutes % 10
};
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH);
displayDigit(digits[i]);
delay(5);
digitalWrite(digitPins[i], LOW);
}
}
void displayDigit(int digit) {
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], digitPatterns[digit] & (1 << (7 - i)));
}
}
void toggleColon() {
digitalWrite(colonPin, !digitalRead(colonPin));
}