Was ik begin dit jaar leuk aan het programmeren aan een GPS-klokje, afgelopen nacht was het uur der waarheid aangebroken:
Zou hij zich automatisch aanpassen aan de wintertijd of niet??
Het antwoord vanochtend was: "Nee!"
Uiteraard was dat balen, en uiteraard wilde ik weten wat de oorzaak van deze fout was. Na kort zoeken werd het duidelijk, een simpel -veel gemaakt- tiepfoutje bleek de reden.
In de routine die ik geschreven heb vul ik een variabele (DST_Yes) met een "true" of een "false".
Om vervolgens wel of niet de Zomertijd (DST, Daylight Savings Time) toe te passen test ik of die variable true of false is.
Dat deed ik als volgt:
if ( DST_Yes = true ) { myhour = myhour + 1; }
// Als zomertijd van toepassing is, tel dan 1 uur op bij de huidige tijd
Echter, mijn tiepfoutje was een heel klein verschil, één =-teken te weinig, het had moeten zijn:
if ( DST_Yes == true ) { myhour = myhour + 1; }
In het eerste geval werd de variabele DST_Yes gevuld met de waarde "true" (DST_Yes wordt true, en dit altijd dus!!), in plaats van getest wat de waarde was, daardoor bleef de klok op zomertijd staan.
In het tweede -verbeterde- geval wordt nu daadwerkelijk getest of de DST_Yes de waarde true heeft, en alleen in dat geval wordt zomertijd toegepast.
Door de aanpassing van vanochtend geeft mijn GPS-klok nu daadwerkelijk, zoals bedoeld, de wintertijd aan.
Kortom: één is-teken is ongelijk aan 2 is-tekens. "=" =! "=="
Hier een link naar mijn nieuwe Arduino-code voor mijn GPS-klok.
3 opmerkingen:
Valt mee dat je de wekker niet om 03:00 uur had gezet om het te checken 😄
Maar geeft toch wel een kick als je het weer zo snel weet op te lossen!
Je hebt vroeger vast Basic of Pascal geprogrammeerd? Dan maak je deze fout heel makkelijk. :-)
Als je je compiler de switch -Wall meegeeft, dan moet hij een warning geven op dit soort onbedoelde assignments.
Maar ik geef toe dat er dan zo veel warnings kunnen komen dat je ze liever negeert... :-)
@Boudewijn: ja vroeger bij MAI heel erg veel met Business Basic gewerkt, maar nu als hobby met Arduino aan het spelen. Ik gebruik de beschikbare ontwikkelomgeving (IDE), daardoor zijn dit soort compuler-vlaggetjes niet zo eenvoudig mee te geven.
Bedankt voor je reactie,
Leo
Een reactie posten