Stap 3: codering
De code is vrij eenvoudig: een timer telt voortdurend omhoog door één seconde per seconde (verrassing, verrassing). Als de teller op 61 seconden, het komt te vervallen, en wordt van 1 minuut en 1 seconde. Als de teller op 60 minuten, het komt te vervallen en wordt 1 uur, 0 minuten en 1 seconde. En, ook wanneer de uur-teller 13, het vervalt al, een laatste keer, steeds 1 uur, 0 minuten, 1 seconde. Het is een reguliere digitale klok!
De Arduino controles ook afstand per seconde, wat betekent dat de Arduino de eerder gemeten afstand tot de huidige afstandsmeting vergelijkt. Als deze twee metingen verschillen door meer dan een vast bedrag (15 cm in deze code), een alarm afgaat (figuurlijk) en de Arduino beschouwt dit als beweging (hooray!). Dit is de trigger voor de rest van de code.
Nu voor de goede dingen. Helaas, als de Arduino afgesloten wordt of als het opnieuw wordt opgestart of als de batterij leeg, er is geen manier voor de Raad om bij te houden waar de klok hand is gepositioneerd. Dit is een eenvoudige oplossing: wanneer de Arduino zelfstart opwaarts, u (Ja, u) zal moeten handmatig de positie van de hand van de klok om te reflecteren op het uur. Na deze ene aanpassing zullen de Arduino klaar om de juiste tijd voor de nabije toekomst bij te houden.
Nu voor de beweging van de hand!
De Arduino kaarten"" de positie van de hand ten opzichte van de positie van een 1 uur. De 1 uur komt overeen met het nummer van de deelactiviteit 172, en de 12 uur komt overeen met het nummer van de deelactiviteit 2060. De rest van de uren worden dienovereenkomstig toegewezen.
Wanneer er beweging is gedetecteerd, wordt de Arduino controleert de timer en controleer de laatste tijd het verplaatst. Als de huidige positie van de Arduino kleiner dan de positie die overeenkomt met de huidige tijd is, het gewoon wordt afgetrokken van de position-waarden en beweegt de stappenmotor dat overeenkomstige aantal stappen.
Bijvoorbeeld, als de Arduino laatst op 1, het "huidige positie", de positie van de hand verplaatst, zou bij stap 172. Als er vervolgens wordt gedetecteerd motion om 5 uur, het uur dat correspondeert met het nummer van de deelactiviteit 860, het zou gewoon de stap getallen aftrekken om een verschil van 688 stappen. De Raad zou vervolgens 688 stappen naar de 5 uur positie verplaatsen.
Als de huidige positie van de Arduino meer dan de positie die overeenkomt met de huidige tijd is, de Raad van bestuur doet een andere berekening: 2060 - huidige positie + huidige tijd-positie.
Bijvoorbeeld: als de huidige tijd 1 uur (positie 172 is) en de huidige positie 5 uur (positie 860 is), zou het de berekening uitvoeren: 2060-172 + 860 = 2748. Dit gaat één volledige lus rond het gezicht van de klok en eindigt op de 1 uur positie.