odometer:
Try this.
If it works, you will see the date and time on your Serial monitor.
Remember that the baud rate of your Serial monitor needs to match the baud rate specified in the code. (If they don't match, then change one or the other.)
#include <Wire.h>
byte ss=0, mi=0, hh=0, wd=6, dd=1, mo=1, yy=0;
void setup()
{
Wire.begin();
Serial.begin(9600);
// clear /EOSC bit
// Sometimes necessary to ensure that the clock
// keeps running on just battery power. Once set,
// it shouldn't need to be reset but it's a good
// idea to make sure.
// Wire.beginTransmission(0x68); // address DS3231
// Wire.write(0x0E); // select register
// Wire.write(0b00011100); // write register bitmap, bit 7 is /EOSC
// Wire.endTransmission();
}
void loop()
{
// ask RTC for the time
// send request to receive data starting at register 0
Wire.beginTransmission(0x68); // 0x68 is DS3231 device address
Wire.write((byte)0); // start at register 0
Wire.endTransmission();
Wire.requestFrom(0x68, 7); // request seven bytes (ss, mi, hh, wd, dd, mo, yy)
// check for a reply from the RTC, and use it if we can
if (Wire.available() >= 7) {
// if we're here, we got a reply and it is long enough
// so now we read the time
ss = bcd2bin(Wire.read()); // get seconds
mi = bcd2bin(Wire.read()); // get minutes
hh = bcd2bin(Wire.read()); // get hours
wd = bcd2bin(Wire.read());
dd = bcd2bin(Wire.read());
mo = bcd2bin(Wire.read());
yy = bcd2bin(Wire.read());
// show that we successfully got the time
Serial.print("Got the time: ");
printTime();
}
else {
// if we're here, that means we were unable to read the time
Serial.println("Unable to read time from RTC");
}
delay(500);
}
byte bcd2bin(byte x) {
// converts from binary-coded decimal to a "regular" binary number
return ((((x >> 4) & 0xF) * 10) + (x & 0xF)) ;
}
void printTime() {
// just like it says on the tin
Serial.print ("'");
if (yy<10) Serial.print("0"); Serial.print(yy,DEC); Serial.print("-");
if (mo<10) Serial.print("0"); Serial.print(mo,DEC); Serial.print("-");
if (dd<10) Serial.print("0"); Serial.print(dd,DEC); Serial.print("(");
switch (wd) {
case 1: Serial.print("Mon"); break;
case 2: Serial.print("Tue"); break;
case 3: Serial.print("Wed"); break;
case 4: Serial.print("Thu"); break;
case 5: Serial.print("Fri"); break;
case 6: Serial.print("Sat"); break;
case 7: Serial.print("Sun"); break;
default: Serial.print("Bad");
}
Serial.print(") ");
if (hh<10) Serial.print("0"); Serial.print(hh,DEC); Serial.print(":");
if (mi<10) Serial.print("0"); Serial.print(mi,DEC); Serial.print(":");
if (ss<10) Serial.print("0"); Serial.print(ss,DEC); Serial.println("");
}
I have tried your code today at 23 Juli 2019. Here's my logs. The time (hh:mm:ss) went fine. However the date isn't. Ok, so that at least already print the right time.
15:41:37.047 -> Got the time: '19-07-23(Wed) 08:41:07
15:41:37.547 -> Got the time: '19-07-23(Wed) 08:41:08
15:41:38.081 -> Got the time: '19-07-23(Wed) 08:41:08
15:41:38.580 -> Got the time: '19-07-23(Wed) 08:41:09
15:41:39.079 -> Got the time: '19-07-23(Wed) 08:41:09
15:41:39.577 -> Got the time: '19-07-23(Wed) 08:41:10
15:41:40.076 -> Got the time: '19-07-23(Wed) 08:41:10
15:41:40.575 -> Got the time: '19-07-23(Wed) 08:41:11
15:41:41.073 -> Got the time: '19-07-23(Wed) 08:41:11
15:41:41.573 -> Got the time: '19-07-23(Wed) 08:41:12
15:41:42.072 -> Got the time: '19-07-23(Wed) 08:41:12
15:41:42.570 -> Got the time: '19-07-23(Wed) 08:41:13
15:41:43.069 -> Got the time: '19-07-23(Wed) 08:41:13
15:41:43.568 -> Got the time: '19-07-23(Wed) 08:41:14
15:41:44.101 -> Got the time: '19-07-23(Wed) 08:41:14
15:41:44.600 -> Got the time: '19-07-23(Wed) 08:41:15
P.S. Turns out i read that wrong, I guess only the day went wrong. I simply +1 every case in the 'printTime()' I don't know wheter that is how it works tho'.