#include "DCF77_Simulator.h"
#include "DCF77_Receiver.h"
#include "DCF77_Constants.h"
DCF77Simulator simulator(9);
DCF77Receiver receiver(2);
bool checkParity(uint64_t f, uint8_t start, uint8_t len, uint8_t pPos) {
uint8_t count = 0;
for (uint8_t i = start; i < (start + len); i++) if (DCF77::read64(f, i)) count++;
return (count % 2 != 0) == DCF77::read64(f, pPos);
}
void setup() {
Serial.begin(115200);
simulator.setTime(20, 15, 28, 3, 24, 4); // Do, 28.03.24, 20:15
simulator.begin();
receiver.begin();
Serial.println(F("DCF77 Analyzer v10.0 Ready."));
}
void loop() {
if (receiver.hasNewFrame()) {
uint64_t f = receiver.getFrame();
receiver.clearFrame();
bool p1 = checkParity(f, DCF77::BIT_MIN_START, DCF77::BIT_MIN_LEN, DCF77::BIT_MIN_P1);
bool p2 = checkParity(f, DCF77::BIT_HOUR_START, DCF77::BIT_HOUR_LEN, DCF77::BIT_HOUR_P2);
bool p3 = checkParity(f, DCF77::BIT_DAY_START, DCF77::BIT_DATE_P3_LEN, DCF77::BIT_DATE_P3);
if (p1 && p2 && p3) {
uint8_t mi = DCF77Receiver::decodeField(f, DCF77::BIT_MIN_START, DCF77::BIT_MIN_LEN);
uint8_t ho = DCF77Receiver::decodeField(f, DCF77::BIT_HOUR_START, DCF77::BIT_HOUR_LEN);
uint8_t ta = DCF77Receiver::decodeField(f, DCF77::BIT_DAY_START, DCF77::BIT_DAY_LEN);
uint8_t mo = DCF77Receiver::decodeField(f, DCF77::BIT_MONTH_START, DCF77::BIT_MONTH_LEN);
uint8_t ja = DCF77Receiver::decodeField(f, DCF77::BIT_YEAR_START, DCF77::BIT_YEAR_LEN);
uint8_t wd = DCF77Receiver::decodeField(f, DCF77::BIT_WDAY_START, DCF77::BIT_WDAY_LEN);
const char* tage[] = {"--", "MO", "DI", "MI", "DO", "FR", "SA", "SO"};
Serial.print(F(">>> ")); Serial.print(tage[wd % 8]); Serial.print(F(", "));
if(ta<10)Serial.print("0"); Serial.print(ta); Serial.print(".");
if(mo<10)Serial.print("0"); Serial.print(mo); Serial.print(F(".20")); Serial.print(ja);
Serial.print(F(" - "));
if(ho<10)Serial.print("0"); Serial.print(ho); Serial.print(":");
if(mi<10)Serial.print("0"); Serial.println(mi);
} else {
Serial.print(F("P-ERR | P1:")); Serial.print(p1?"OK":"X");
Serial.print(F(" P2:")); Serial.print(p2?"OK":"X");
Serial.print(F(" P3:")); Serial.println(p3?"OK":"X");
}
}
}