Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



DCF77 Klok - Datum ...
 
Deel:
Meldingen
Alles wissen

[Opgelost] DCF77 Klok - Datum en tijd formaat

9 Berichten
2 Gebruikers
1 Reactions
2,121 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2728
Topic starter  

Hoi Hans, ben hartstikke nieuw dus heb nog veel te leren.

Ik heb een werkende arduino sketch voor een DCF77 klok die tijd en datum in serial.print weergeeft 12 18 30   4 1 20. Nu zou ik graag er de tijd en de datum als volgt 12 18 30 maandag 4 januari 2020 van willen maken maar ben echt al meer dan 3 dagen aan het zoeken en weet niet hoe. Heb Thijs Elenbaas in 2016 om een hint te geven waarop dit antwoordt . : Ja hoor, ik heb wel een hint. Bij de DCF77 library is ook de Time library toegevoegd. Dit geeft je allemaal functies om time_tte zetten, bv naar dag en maand  

Ik ben al lang aan het zoeken maar ben geen programmeur helaas.

Kun jij me al is het maar een voorbeeldje geven van 1 dag en 1 maand dan denk ik wel dat ik er uit kom. Dit is de sketch die ik heb:

#include < DCF77.h > // https://github.com/thijse/Arduino-Libraries/downloads 

#include < TimeLib.h > // http://www.arduino.cc/playground/Code/Time 


#define DCF_PIN 2 // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0 // Interrupt number associated with pin

time_t prevDisplay = 0; // when the digital clock was displayed
time_t time;
DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT);

void setup() {
  Serial.begin(9600);
  DCF.Start();
  setSyncInterval(30);
  setSyncProvider(getDCFTime);
  // It is also possible to directly use DCF.getTime, but this function gives a bit of feedback
  //setSyncProvider(DCF.getTime);

  Serial.println("Wacht op DCF77 tijd pulse ... ");
  Serial.println("Het kan 2 minuten duren voordat het is berekend.");
  while (timeStatus() == timeNotSet) {
    // wait until the time is set by the sync provider
    Serial.print(".");
    delay(2000);
  }
}

void loop() {
  if (now() != prevDisplay) //update the display only if the time has changed
  {
    prevDisplay = now();
    digitalClockDisplay();
  }
}

void digitalClockDisplay() {
  // digital clock display of the time
  Serial.println("");
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(weekday());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits) {
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

unsigned long getDCFTime() {
  time_t DCFtime = DCF.getTime();
  // Indicator that a time check is done
  if (DCFtime != 0) {
    Serial.print("X");
  }
  return DCFtime;
}

 

Met vriendelijke groet, Hans


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2728
Topic starter  

Hoi naamgenoot 😊 

Gelukkig Nieuw Jaar!

Ik heb zelf geen DCF77, maar misschien kan ik je toch helpen.
De directe link voor de DCF77.h library vond ik hier en voor wat ik kan zien is jouw code het InternalClockSync voorbeeld.

Ik zie ook dat in dit voorbeeld de interne klok van de Arduino gelijk gezet wordt aan het signaal van de DCF77, met de setTime() functie van de Arduino Time library.
Dit maak alles een stuk makkelijker.

Bij de Time Library zien we al de functies die je nodig gaat hebben (ik kan ze zelf helaas niet testen):

 hour();    // The hour now (0-23)
 minute(); // The minute now (0-59)
 second(); // The second now (0-59)
 day(); // The day now (1-31)
 weekday(); // Day of the week (1-7), Sunday is day 1
 month(); // The month now (1-12)
 year(); // The full four digit year: (2009, 2010 etc)

monthStr() // tekst voor de maand (waarschijnlijk Engels!)
monthShortStr() // korte naam van de maand (b.v Jan/Feb/etc)
dayStr() // tekst voor de dag van de week
dayShortStr()

Je bent op zoek naar dit formaat: 12 18 30 maandag 4 januari 2020 - dus: uren minuten seconden dag-van-de-week dag maand jaar.
In het voorbeeld geeft de functie digitalClockDisplay() de output die we nu krijgen, dus die moeten we aanpassen naar zoiets als dit:

void digitalClockDisplay(){
  Serial.print(hour());
Serial.print(":");
  Serial.print(minute());
Serial.print(":");
  Serial.print(second());
  Serial.print(" ");

  Serial.print(dayStr(weekday()));
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(monthStr(month()));
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

Nu weet ik dus niet of de weekdagen en maanden in het Nederlands moeten verschijnen en of de Arduino library rekening houd met de taal.
Mocht dit niet zo zijn, dan moeten we een array maken met weekdagen en maanden. Maar laten we eerst kijken dat dit voorbeeld werkt (ik kan het niet zo goed testen hier) 😊 


   
BeantwoordenCiteren
(@pimohans)
Active Member
Deelgenomen: 4 jaar geleden
Berichten: 16
 

Hoi Hans,

vandaar dat ik er pimoHans van heb gemaakt ander lukt het niet en zo veel duidelijker.

Dank je wel het is gelukt en ik maar dagen zoeken en veel uitproberen wat fout ging.

Dit geeft de serial.print nu weer:

Wat fijn dat er eindelijk een eind aan de zoektocht is gekomen........................


   
BeantwoordenCiteren
(@pimohans)
Active Member
Deelgenomen: 4 jaar geleden
Berichten: 16
 

@Hans

Als je al zoveel tijd hebt besteed dan waardeer je meer en anders


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2728
Topic starter  

Geweldig! Mooi om te horen dat het werkte! 👍 

En nogmaals dank voor het kopje koffie ☕ 😉 

Ik zie dat de tekst in het Engels is ... mocht je dat liever in het Nederlands zien dan hoor ik het graag.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2728
Topic starter  
Geplaatst door: @pimohans

Als je al zoveel tijd hebt besteed dan waardeer je meer en anders

Soms is een duwtje in de juiste richting al genoeg he? 😉 

En ... het doel van mijn website en het forum is om iedereen een beetje te helpen.
Op die manier heeft iedereen er lol van 😊 

Fijn dat het werkt!


   
BeantwoordenCiteren
(@pimohans)
Active Member
Deelgenomen: 4 jaar geleden
Berichten: 16
 

Hi Hans,

heb het wel liever in het Nederlands maar ik zoek ook wel verder of het moet echt maar weinig werk zijn

Groetjes

Hans


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 11 jaar geleden
Berichten: 2728
Topic starter  

Eigenlijk zou het eenvoudig moeten zijn.
Misschien behulpzaam: In mijn kleine cursus voor Arduino programmeren, vindt je wat meer uitleg over het data type "String" (met hoofdletter) en Array's.

Als eerste heb je 2 arrays nodig, zoiets als:

String Weekdagen[7] = { 'Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag' } ;
String Maanden[12] = { 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December' } ;

En dan voor de weergave:

  Serial.print(Weekdagen[ weekday() -1 ]);
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
Serial.print(Maanden[ month() -1 ]);

Beiden (Weekdagen en Maanden) zijn een array, en array's beginnen bij nul met tellen.
De functies month() en weekday() beginnen echter bij 1 met tellen (en weekdagen beginnen met Zondag, volgens de beschrijving).
Dus we moeten van deze nummers 1 aftrekken om de juiste Array index te vinden.

Hopelijk helpt dit. 😊 


   
BeantwoordenCiteren
(@pimohans)
Active Member
Deelgenomen: 4 jaar geleden
Berichten: 16
 

Ga het uitproberen want ik wil er ook van leren natuurlijk, laat het weten wanneer het gelukt is en/of ik je gewaardeerde hulp nog nodig heb


   
Hans reageerde
BeantwoordenCiteren
Deel: