Slutade klockan (3 / 4 steg)
Steg 3: kodning
Koden är ganska enkelt: en timer räknar kontinuerligt upp av en sekund varje sekund (surprise, surprise). När timern når 61 sekunder, det utgår, och blir 1 minut och 1 sekund. När timern når 60 minuter, det utgår och blir 1 timme, 0 minuter, och 1 sekund. Och likaså när räknaren timme når 13, det utgår en sista gång, blir 1 timme, 0 minuter, 1 sekund. Det är en vanlig digital klocka!
Arduinoen kontrollerar också avstånd varje sekund, vilket innebär att Arduino jämför det tidigare uppmätta avståndet till den nuvarande avståndsmätning. Om dessa två mätningar skilja sig åt med mer än en viss summa (15 cm i den här koden), ett larm går bort (bildligt) och Arduino anser så motion (hurra!). Detta kommer att bli den utlösande faktorn för resten av koden.
Nu till bra grejer. Tyvärr, om Arduino blir frånkopplad eller om det omstarter eller om batteriet tar slut, det finns inget sätt för styrelsen att hålla reda på var klockan handen är placerad. Detta har en enkel fix: när Arduino startar upp, du (Ja, du) kommer att behöva manuellt position klockan handen för att återspegla timmen. Efter denna en justering, att Arduino vara redo att hålla reda på den korrekta tiden för överskådlig framtid.
Nu för förflyttning av handen!
Arduinoen kartor"" position handen i förhållande till en 1 klockan position. 1 klockan motsvarar steg nummer 172, och den 12 klockan motsvarar steg nummer 2060. Resten av timmarna mappas därmed.
När rörelse detekteras, Arduino kontroller timern och kolla sista gången det flyttade. Om den aktuella positionen för Arduino är mindre än den position som motsvarar den aktuella tiden, det bara subtraherar värdena och flyttar stegmotor att motsvarande antal steg.
Om Arduino flyttade senast vid 1, den "aktuella position", placera av handen, vore till exempel steg 172. Om rörelse detekteras sedan klockan 5, skulle den timme som motsvarar steg nummer 860, det helt enkelt subtrahera tal steg för att få en skillnad av 688 steg. Styrelsen skulle sedan flytta 688 steg till 5 klockan position.
Om den aktuella positionen för Arduino är mer än det läge som motsvarar den aktuella tiden, styrelsen gör en annan beräkning: 2060 - nuvarande position + aktuella tidspositionen.
Till exempel: om den aktuella tidpunkten är 1 klockan (position 172) och den aktuella positionen är 5 klockan (position 860), det skulle köra beräkningen: 2060-172 + 860 = 2748. Detta kommer att gå en full slinga runt ansiktet av klockan och slutet på 1 klockan.