This is just a demonstration code for what is happening. If I set: uint32_t hour, minute, second;
to: uint8_t hour, minute, second
or: int16_t hour, minute, second;
or basically any data type that has range up to 32767, counter overflows after 32767 and jumps to 4294934528 which doesn't make any sense to me. Why should variables: hour, minute or second be larger than 1 byte if they only store numbers up to 60? Tested on original Arduino Uno and Nano Every.
#include <Wire.h>
#include <DS3231.h>
uint32_t counter = 0;
uint32_t hour, minute, second;
DS3231 clock;
RTCDateTime dt;
void setup() {
Serial.begin(9600);
clock.begin();
clock.setDateTime(2024, 3, 29, 9, 6, 0);
}
void loop() {
dt = clock.getDateTime();
hour = dt.hour;
minute = dt.minute;
second = dt.second;
Serial.print("Hour: ");
Serial.print(hour);
Serial.print("\tMinute: ");
Serial.print(minute);
Serial.print("\tSecond: ");
Serial.print(second);
counter = hour * 3600 + minute * 60 + second;
Serial.print("\tCounter: ");
Serial.println(counter);
delay(1000);
}
Serial monitor:
Hour: 9 Minute: 6 Second: 0 Counter: 32760
Hour: 9 Minute: 6 Second: 1 Counter: 32761
Hour: 9 Minute: 6 Second: 2 Counter: 32762
Hour: 9 Minute: 6 Second: 3 Counter: 32763
Hour: 9 Minute: 6 Second: 4 Counter: 32764
Hour: 9 Minute: 6 Second: 5 Counter: 32765
Hour: 9 Minute: 6 Second: 6 Counter: 32766
Hour: 9 Minute: 6 Second: 7 Counter: 32767
Hour: 9 Minute: 6 Second: 8 Counter: 4294934528
Hour: 9 Minute: 6 Second: 9 Counter: 4294934529
Hour: 9 Minute: 6 Second: 10 Counter: 4294934530
Hour: 9 Minute: 6 Second: 11 Counter: 4294934531
Hour: 9 Minute: 6 Second: 12 Counter: 4294934532
Hour: 9 Minute: 6 Second: 13 Counter: 4294934533
Hour: 9 Minute: 6 Second: 14 Counter: 4294934534
Hour: 9 Minute: 6 Second: 15 Counter: 4294934535