Rest of the code:
/**************************************************************
* MAIN LOOP *
**************************************************************/
void loop() {
const char STX = 2;
const char ETX = 3;
Clock::time_t now;
DCF77_Clock::get_current_time(now);
if (now.month.val > 0) {
Serial1.print(STX);
Serial1.print("D:");
paddedPrint(now.day);
Serial1.print('.');
#ifdef DEBUG
Serial.println();
paddedPrintUSB(now.day);
Serial.print('.');
#endif // END DEBUG
paddedPrint(now.month);
Serial1.print('.');
#ifdef DEBUG
paddedPrintUSB(now.month);
Serial.print('.');
#endif // END DEBUG
paddedPrint(now.year);
Serial1.print(';');
#ifdef DEBUG
paddedPrintUSB(now.year);
Serial.print(' ');
#endif // END DEBUG
Serial1.print("T:");
Serial1.print(now.weekday.digit.lo);
Serial1.print(';');
#ifdef DEBUG
Serial.print("T:");
Serial.print(now.weekday.digit.lo);
Serial.print(' ');
#endif // END DEBUG
Serial1.print("U:");
paddedPrint(now.hour);
Serial1.print('.');
#ifdef DEBUG
paddedPrintUSB(now.hour);
Serial.print(':');
#endif // END DEBUG
paddedPrint(now.minute);
Serial1.print('.');
#ifdef DEBUG
paddedPrintUSB(now.minute);
Serial.print(':');
#endif // END DEBUG
paddedPrint(now.second);
Serial1.print(';');
#ifdef DEBUG
paddedPrintUSB(now.second);
Serial.print(' ');
#endif // END DEBUG
uint8_t state = DCF77_Clock::get_clock_state();
Serial1.print(
state == Clock::useless || state == Clock::dirty? '#' // not synced
: ' ' // good
);
Serial1.print(
state == Clock::synced || state == Clock::locked? ' ' // DCF77
: '*' // crystal clock
);
#ifdef DEBUG
switch (state) {
case Clock::useless: Serial.print(F("useless")); break;
case Clock::dirty: Serial.print(F("dirty")); break;
case Clock::synced: Serial.print(F("synced")); break;
case Clock::locked: Serial.print(F("locked")); break;
}
Serial.print(' ');
#endif // END DEBUG
Serial1.print(now.uses_summertime? 'S': ' ');
#ifdef DEBUG
Serial.print(now.uses_summertime? "Summer": "Winter");
Serial.print(' ');
#endif // END DEBUG
Serial1.print(
now.timezone_change_scheduled? '!':
now.leap_second_scheduled? 'A':
' '
);
Serial1.print(ETX);
uint8_t signalQual = DCF77_Clock::get_prediction_match();
if(signalQual == 255 || signalQual == 0 ){
signalQual = 00;
} else {
signalQual = signalQual * 2;
}
#ifdef DEBUG
Serial.print("Quality ");
Serial.print(signalQual);
Serial.print("%");
#endif // END DEBUG
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_crox4hb_tr); // 14px
u8g2.setCursor(3, 15);
LCDpaddedPrint(now.hour);
u8g2.setCursor(25, 15);
u8g2.print(":");
u8g2.setCursor(31, 15);
LCDpaddedPrint(now.minute);
u8g2.setCursor(53, 15);
u8g2.print(":");
u8g2.setCursor(59, 15);
LCDpaddedPrint(now.second);
u8g2.setFont(u8g2_font_profont11_tr); // 11px
u8g2.setCursor(12, 25);
u8g2.print(now.uses_summertime? "Sommerzeit": "Winterzeit");
u8g2.setCursor(7, 35);
switch (state) {
case Clock::useless: u8g2.print("Useless"); break;
case Clock::dirty: u8g2.print("Dirty"); break;
case Clock::synced: u8g2.print("Synced"); break;
case Clock::locked: u8g2.print("Locked"); break;
}
u8g2.setCursor(54, 35);
u8g2.print(signalQual);
u8g2.setCursor(72, 35);
u8g2.print("%");
u8g2.setCursor(5, 46);
u8g2.print("D");
u8g2.setCursor(11, 46);
u8g2.print(now.weekday.digit.lo);
u8g2.setCursor(22, 46);
LCDpaddedPrint(now.day);
u8g2.setCursor(33, 46);
u8g2.print(".");
u8g2.setCursor(39, 46);
LCDpaddedPrint(now.month);
u8g2.setCursor(50, 46);
u8g2.print(".");
u8g2.setCursor(56, 46);
u8g2.print("20");
u8g2.setCursor(68, 46);
LCDpaddedPrint(now.year);
} while ( u8g2.nextPage() );
}
}