Laser skär gear clock - med ChronoDot! (6 / 8 steg)
Steg 6: Programmera Arduino
Jag kommer inte att gå över hur man programmerar en Arduino, det finns gott om exempel online. Jag använde exemplet motor knopp i Arduino IDE som grund för körning av stegmotorer. Därifrån ändrade jag koden för att köra stegmotorer.
Vid programmering en klocka vill du uppenbarligen tar tid att köra och inte förlora tid. Min första hacka på koden, min klocka förlorade cirka 15 minuter över natten. Det var inte acceptabelt. Algoritmen för att koden var att räkna till 60 sekunder, kryssa minutvisaren, sedan räkna till 5 minuter och kryssa timvisaren. Inte de mest eleganta lösningar.
Så vad jag gjorde nästa var att använda en datum/tid-biblioteket och hålla reda på i sista minuten, då jag skulle kolla tiden var 5 sekunder eller så och om förändringar i minuten kryssa jag skulle klockan. Var 5 minuter, kommer jag kryssa timvisaren. Jag satt även den pin13 ledde till flash varje sekund. Du måste installera tid biblioteket om du vill köra pde koden. Det laddas ner här http://www.arduino.cc/playground/Code/Time
Kod (klipp ut och klistra in) eller hämta PDE nedan:
/*
* gearclock.pde
*
* Brian Wagner
* LVL1 - Louisville Hackerspace
* www.lvl1.org
* 9/10/11
* 9/18/11 omarbetas för att använda tid
*/
#include < Stepper.h >
#include < Time.h >
#define steg 20 / / nummerlistan har 20 steg per varv
int ledPin = 13. LED är ansluten till digital stift 13
int LastMinute;
int ThisMinute;
int LastSecond;
int ThisSecond;
för 21-02485-03 stepper, färgerna i ordning är gul, röd, svart/vit, blå
Stepper timmar (steg, 4, 5, 6, 7);
Stepper minuter (steg, 8, 9, 10, 11);
int MinuteCount;
tid t;
void setup()
{
pinMode (ledPin, produktionen);
setTime(1,1,1,1,1,1); ställa in tiden till 1 Jan 2001
Det spelar egentligen ingen roll vad tiden är inställd,
Vi kontrollerar för att se om en minut har gått.
t = now();
LastMinute = minute(t);
LastSecond = second(t);
Hur snabbt kommer det att steg
Minutes.setSpeed(5);
Hours.setSpeed(5);
testa minuter och timmar att göra sur det går i rätt riktning
Minutes.Step(100);
Hours.Step(100);
Minutes.Step(4);
Hours.Step(4);
MinuteCount = 1;
}
void loop()
{
t = now();
ThisMinute = minute(t);
ThisSecond = second(t);
om (ThisSecond! = LastSecond) {
digitalWrite (ledPin, hög); ställa in lysdioden på
Delay(200); vänta 500ms
digitalWrite (ledPin, låg); iväg för LED
LastSecond = ThisSecond;
}
om (ThisMinute! = LastMinute) {
Minutes.Step(2);
MinuteCount ++;
LastMinute = ThisMinute;
}
Kryssa runt ringen var 5 minuter
om (MinuteCount > 5) {
Hours.Step(2);
MinuteCount = 1;
}
Delay(200);
}