Stap 6: Programmeren van de Arduino
Ik ben niet van plan om te gaan over hoe te programmeren van een Arduino, er zijn tal van online voorbeeld. Ik gebruikte het voorbeeld motor knop in de Arduino IDE als basis voor het besturen van de stappenmotoren. Vanaf daar wijzigde ik de code om te rijden de stappenmotoren.
Bij het programmeren van een klok, wilt u natuurlijk uw klok te lopen en niet los tijd. Mijn eerste hack op de code, mijn klok verloren ongeveer 15 minuten van het 's nachts. Dat was niet acceptabel. Het algoritme voor die code moest tellen tot 60 seconden, de minutenwijzer, vink dan tellen tot 5 minuten en vink de uurwijzer. Niet de meest elegante oplossingen.
Dus wat ik deed vervolgens was een datum/tijd-bibliotheek gebruiken en bijhouden van de laatste minuut, dan ik zou check de tijd om de 5 seconden of zo en als de minuut verandert dan ik zou de klok tikt. Elke 5 minuten, zal ik de uurwijzer Vink. Ook zet ik de pin13 leidde tot flash elke seconde. U zult moeten installeren van de bibliotheek van de tijd als de pde-code wilt uitvoeren. Het is gedownload hier http://www.arduino.cc/playground/Code/Time
Code (knippen en plakken) of download de PDE hieronder:
/*
* gearclock.pde
*
* Brian Wagner
* LVL1 - Louisville van Hackerspace
* www.lvl1.org
* 9/10/11
* 9/18/11 herwerkt voor het gebruik van time_t
*/
#include < Stepper.h >
#include < Time.h >
#define stappen 20 / / de stepper heeft 20 stappen per omwenteling
int ledPin = 13; LED aangesloten op digital pin 13
int LastMinute;
int ThisMinute;
int LastSecond;
int ThisSecond;
voor de 21-02485-03 stepper, de kleuren in de volgorde zijn geel, rood, zwart/wit, blauw
Stepper uur (stappen, 4, 5, 6, 7);
Stepper minuten (stappen, 8, 9, 10, 11);
int MinuteCount;
time_t t;
VOID Setup
{
pinMode (ledPin, OUTPUT);
setTime(1,1,1,1,1,1); Stel de tijd tot 1 Jan 2001
Het is echt niet uit wat de tijd is ingesteld
We controleren om te zien als een minuut is verstreken.
t = now();
LastMinute = minute(t);
LastSecond = second(t);
hoe snel gaat het om stap
Minutes.setSpeed(5);
Hours.setSpeed(5);
Test de minuten en uren te maken het gaat in de juiste richting sur
Minutes.Step(100);
Hours.Step(100);
Minutes.Step(4);
Hours.Step(4);
MinuteCount = 1;
}
void loop
{
t = now();
ThisMinute = minute(t);
ThisSecond = second(t);
Als (ThisSecond! = LastSecond) {}
digitalWrite (ledPin, hoge); de LED aangezet
delay(200); wachten 500ms
digitalWrite (ledPin, laag); verrekening van de LED
LastSecond = ThisSecond;
}
Als (ThisMinute! = LastMinute) {}
Minutes.Step(2);
MinuteCount ++;
LastMinute = ThisMinute;
}
Vink de ring uur elke 5 minuten
Als (MinuteCount > 5) {}
Hours.Step(2);
MinuteCount = 1;
}
delay(200);
}