DCF77 Uhr mit "erweitertern" Anzeigen - Achtung Anfänger :)

Guten Tag,

seit kurzer Zeit beschäftige ich mich nun mit meinen UNO Arduino Board
und da ich Zeitsignale schon immer spannend fand (Funk) eben eine DFC Uhr als erstes Projekt :grin:

Ich benutze den Empfänger von Lunalander
und ein i2c lcd von Sainsmart

#include "DCF77.h"
#include "Time.h"
#include "Wire.h"
#include "LCD.h"
#include "LiquidCrystal_I2C.h"

#define DCF_PIN 2                // Connection pin to DCF77 device
#define DCF_INTERRUPT 0          // Interrupt number associated with pin
char* Wochentag[8] = {"nix","So","Mo","Di","Mi","Do","Fr","Sa"}; // *** lege die Wochentage fest, fängt mit 1 (So.) an
#define I2C_ADDR    0x27  // Define I2C Address where the SainSmart LCD is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT,false); // *** pin/pin/(normal(true) or invert signal(false)

void setup() { 
  
  lcd.begin (20,4);
  
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  
  
}

void printbin8( uint8_t val )
{
  for( uint8_t i = 8; i; i--, val <<= 1 )
    putchar( !!(val & 0x80) + '0' );
 
}

void loop() {
  delay(300);
  time_t DCFtime = DCF.getTime(); // *** frag ab, ob DCF77-Signal erkannt wurde ...
  if (DCFtime!=0)
  {
    lcd.clear();
    lcd.home ();
    lcd.setCursor ( 0, 3 );
    lcd.print("DCF77 time ");
    setTime(DCFtime);
  }    
  digitalClockDisplay();  
}


void digitalClockDisplay(){
  
lcd.setCursor(0, 0);                      
  printDigits(day());
  lcd.print(".");
  printDigits(month());
  lcd.print(".");
  lcd.print(year());
  lcd.print(" ");
  lcd.print("weekday");
  lcd.print(" ");
  lcd.print(weekday ());
  
lcd.setCursor(0, 1);
  printDigits(hour());
  lcd.print(":");
  printDigits(minute());
  lcd.print(":");
  printDigits(second());
  lcd.print(" MEZ");
}
void printDigits(int digits){
   if(digits < 10)
   lcd.print('0');
  lcd.print(digits);
}

So, der Code läuft auch erstmal freu
Allerdings würde ich gerne einige Zusatz Features einbauen und wenn ich damit anfange fängt der compiler an zu meckern :frowning:

Wunschliste :

Time Stamp der letzten Sync auf dem LCD

per Knopfdruck umschalten um sich die Decodierung des DCF Protokolls quasi life anzusehen

Da die Empfangsqualität des DCF (Langwelle ja stark unterschiedlich ist würde ich gerne
eine RGB Diode oder Balkenanzeige die Empfangsquali anzeigen lassen

Ideen wie ich das anstelle ?
Oder wisst Ihr von andern die das schon so, oder so ähnlich gemacht haben ?

Gruss Frank

und wenn ich damit anfange fängt der compiler an zu meckern

Und wir sollten wissen an was er sich anstößt?
Da mußt Du uns schon den modifizierten Sketch und die Fehlermeldungen geben.

Ich kenne kein Modul das die Signalqualität ausgibt.

Grüße Uwe

Schau Dir mal die Beispielprogramme zu meiner Library an: DCF77 Library | Blinkenlight. Insbesondere der "Swiss Army Debug Helper" kann das eigentlich alles schon. Du muesstest die Ausgabe nur auf das LCD anpassen.

Was fehlt ist "Zeitpunkt der letzten Synchronisation". Ist aber bei der Art wie ich dekodiere auch irgendwie nicht besonders sinnvoll. Die Library hat aber einen Zustand wie lange sie bereits im Zustand "unlocked" oder "free" läuft. In Deutschland wirst Du das aber wenig bis gar nicht erleben, daß meine Library nicht mehr syncen kann.

Soll heissen: wenn die Lib mal "eingeschwungen" ist, dann mußt Du die Antenne abziehen oder der Sender muß fast eine Stunde ausfallen bis nichts mehr geht.

Einziges Problem: Du brauchst einen Arduino der einen Quarz besitzt. Auf der Library Homepage stehen die Systemanforderungen.

vielen Dank ! guck ich mir nachher gleich mal an :slight_smile:
Und guck was sich (für mich) verwenden lässt

Frank