Digitale klok met veel mogelijkheden

Ik heb met behulp van een RTC (DS3231) en een LCD (16x2) een digitale klok gebouwd.

De klok heeft veel mogelijkheden:

  • Tijd weergeven
  • Datum weergeven (verschillende formaten)
  • Temperatuur weergeven (Celcius en Fahrenheit)
  • Dag vd week weergeven (Engels en Nederlands)
  • Weeknummer weergeven
  • Dagnummer weergeven

Future:

  • Luchtvochtigheid (%)
  • Dauwpunt (Celcius en Fahrenheit)
  • Alarm
  • Timer
  • Zomer/wintertijd instellen
  • Lokale tijd van verschillende locaties

Deze klok wordt nog verder uitgebreid dmv knoppen, maar hiervoor koop ik een shield of een groter LCD. Mijn vraag aan jullie is, is of jullie verbeteringen hebben voor mijn code.

Delay(5000) niet echt de beste keuze
Commentaar en functie beschrijving commentaar

nicoverduin:
Delay(5000) niet echt de beste keuze
Commentaar en functie beschrijving commentaar

Delay(5000) vervangen door eenzelfde oplossing als BlinkNoDelay?
En wat bedoel je precies met commentaar en functie beschrijving commentaar? Meer uitleg geven over de functies?

Geef previousMillis en oldMillis namen die de lading dekken.

bv previousMillis -> lastDateTimeRefreshMillis

Voor post #2 : 2 x yep

Ziet er goed uit.
Een paar opmerkingen:

Zoveel moeite doen en dan de DHT22 sensor gebruiken ?
De DS18B20 is nauwkeurig voor de temperatuur en de BME280 is nauwkeurig voor de luchtvochtigheid.

Beschrijf je ergens welk Arduino board je gebruikt ?

Sommigen zeggen dat je voor een Arduino Uno de 'String' class beter niet kunt gebruiken.
Ik zie bij jou geen voordeel van de String class. Je zou gewoon char arrays kunnen doen, en die later in PROGMEM zetten.
Stel dat je daar een stuk of 20 talen wilt gaan doen, dan is String vervelend, en gewone char arrays in PROGMEM handiger.

Je hebt regel 68, met "const String months[kNumSu..." op één regel gezet. Dat ziet er niet mooi uit (nou ja, dat vind ik dan).
De code binnen een if-statement zal ik ook nooit er achter zetten maar altijd op een nieuwe regel.
Toen ik wat beter naar de stijl ging kijken zag ik zelfs nog iets dat niet consequent is. Bij een paar functies staat de openings '{' op een nieuwe regel, terwijl die bij de meeste achteraan staat.

Is de "static_cast" niet een beetje overbodig ? Gewoon (int) of int() kan toch ook.

Zit de Europese zomer/wintertijd (DST) in die Timezone library ? Dat is lastig om te zien in de code van die library. Veel code doet de berekening per dag en schakelt de DST om 00:00 om. Heb je het geprobeerd of het goed werkt ?
Ik heb een klok met Nextion scherm, die verspringt op de seconde van 01:59:59 naar 03:00:00 en in oktober van 02:59:59 naar 02:00:00. De klok draait in de lokale tijd, en iedere keer als ik de tijd laat zien dan tel ik daar met een functie de eventuele zomertijd bij op. Die funtie kijkt of het zomer- of wintertijd is. Zo hou ik de tijd als wintertijd en kan ik dus gemakkelijk berekenen hoeveel uur iets duurt.

Koepel en Sebastiaan,

Ik ben net een oplossing aan het zoeken voor de winter / zomertijd!
Ik heb niet veel kennis, het lukt me net delen uit verschillende codes samen te voegen.
Zouden jullie code die jullie hebben eens kunnen posten en/of doormailen?

In bijlage mijn code, maar met datum in de 'if ' lijn past hij tijd elke loop aan, en zonder datum doet hij het elke dag... En dan zou ik nog probleem hebben als hij uur terug moet, dat hij dit dan elke keer doet als het een uur later weer 3u is...

Ik hoop dat jullie code kunnen doorsturen, of nog beter mijn code aanpassen, want vrees dat jullie moeilijkheidsgraad van jullie code boven mijn kunnen is

problem_code.ino (7.79 KB)

Nou dat is niet zo heel moeilijk hoor.
Wat je niet moet doen is kijken welke dag en hoe laat het is, want zoals je al bemerkt heb creëer je zo een hysteresis waar je niet meer uit komt.

Wat je wel moet doen, is bijhouden of je in de zomer of wintertijd zit.
En dan een datum en tijdstip controleren.
Wanneer je op die datum eenmaal in de winter of zomertijd zit, weet je dus dat je de aanpassing al gemaakt hebt.

Dit is 1 van de belangrijkste dingen die je uit de blink without delay (klik !) sketch leert als je 'm werkelijk uitgebreid bestudeert.