Linjära klockan (12 / 22 steg)
Steg 12: Prototyp version - programvara
Programvaran är inte komplicerat, men se till att du har den senaste versionen av Adafruit egna Motorshield drivrutinen. Det finns en fix i det som är viktigt för denna kod.Koden:
Det finns en intern tid representation, bestående av tre ints: currentSeconds, currentMinutes och currentHours. Denna gång är förinställd på start upp och ökas medan programmet körs.
Huvudloop för programmet gör en notering på starttid och sedan kontrollerar kontinuerligt aktuell tid att se om det är 1000 millisekunder senare eller inte. Om det är, då det ökar den interna klockan gången (doTick()) och träffar en procedur för att ändra placeringen av indikatorer på klockan (renderTime()).
Förfarande doTick() behandlar uppräkning sekunder till minuter och minuter till timmar och återställa dessa värden vid behov.
Förfarande renderTime() behandlar omvandla tiden i H:M:S till positioner på urtavlan, eller mer korrekt, placerar av stepper. Programmet har ett koncept för den aktuella positionen av de indikatorer (förinställda vid start 00:00 - läget längst till vänster), och använder detta första startposition för att besluta om att flytta genom framåt eller bakåt.
Med hjälp av intern tid hålla av Arduino är ganska taskiga marken (se detta instructable för en bra körning ner på varför, och en möjlig lösning). Det finns många sätt runt detta om det är viktigt: Arduino huvudsidorna har några sätt att göra det korrekt, samt saker om hur du använder tid biblioteket. Jag gick för en enklare lösning, med tanke på att det är en prototyp (Ja, det är min ursäkt för varje gång jag gör en hacka).
Jag använder AFMotor biblioteket för körning steppers, eftersom jag använder Adafruit motorshield. Om du kör steppers genom en annan krets, kan du förmodligen använda de vanliga Arduino stepper bibliotek med minimal kod hugga. Om du hämtar koden, ska filen sparas med en .pde på slutet. Inte säker på hur du ändrar filnamnet på instructables!