// klok.ino - de DS3231 lezen: met RTClib, en daarna de registers zelf (BCD) #include #include RTC_DS3231 rtc; byte bcdNaarGetal(byte b) { // 0x34 -> 3 * 10 + 4 = 34 return (b >> 4) * 10 + (b & 0x0F); } void printTwee(int x) { if (x < 10) Serial.print('0'); Serial.print(x); } void setup() { Serial.begin(115200); Wire.begin(); if (!rtc.begin()) { Serial.println("# geen DS3231 op adres 0x68"); return; } if (rtc.lostPower()) Serial.println("# de klok heeft stilgestaan: stel ze opnieuw in"); DateTime nu = rtc.now(); // 1. met de bibliotheek Serial.print("RTClib: "); Serial.print(nu.year()); Serial.print('-'); printTwee(nu.month()); Serial.print('-'); printTwee(nu.day()); Serial.print(' '); printTwee(nu.hour()); Serial.print(':'); printTwee(nu.minute()); Serial.print(':'); printTwee(nu.second()); Serial.println(); Wire.beginTransmission(0x68); // 2. zelf: registerwijzer op 0x00 ... Wire.write(0x00); Wire.endTransmission(); Wire.requestFrom(0x68, 7); // ... en zeven registers lezen byte r[7]; Serial.print("registers:"); for (int i = 0; i < 7; i++) { r[i] = Wire.read(); Serial.print(" "); if (r[i] < 16) Serial.print('0'); Serial.print(r[i], HEX); } Serial.println(); Serial.print("zelf: 20"); printTwee(bcdNaarGetal(r[6])); // jaar Serial.print('-'); printTwee(bcdNaarGetal(r[5] & 0x1F)); // maand (bit 7 is de eeuw) Serial.print('-'); printTwee(bcdNaarGetal(r[4])); // dag Serial.print(' '); printTwee(bcdNaarGetal(r[2] & 0x3F)); // uur (24-uursmodus) Serial.print(':'); printTwee(bcdNaarGetal(r[1])); Serial.print(':'); printTwee(bcdNaarGetal(r[0] & 0x7F)); Serial.println(); } void loop() { }