Stap 7: Haak een Chronodot.
Ik vond het echt makkelijk te programmeren. Ik gebruikte het testprogramma aan de onderkant van de documentatiepagina als basis.
Om de chronodot haak, maakte ik een paar draden aansluiten op de 5v, gnd, scl en sda pinnen op de chronodot. Ik aangesloten de macht en gnd connectors op de chronodot op de 5V en gnd verbindingslijnen op de Arduino. De SDA pin verbonden met analoge pin 4 en pin van de SCL gaat naar analoge pin 5. Hier is een bron voor het aansluiten van de Chronodot: http://www.codingcolor.com/microcontrollers/an-arduino-lcd-clock-using-a-chronodot-rtc/
Toen ik de chronodot test code in mijn programma en weg ging het gehackt!
Hier is de code, of kunt u hieronder downloaden.
/*
* gearclock_Chronodot.pde
*
* Brian Wagner
* LVL1 - Louisville van Hackerspace
* www.lvl1.org
* 9/10/11
* 9/18/11 herwerkt voor het gebruik van time_t
* 9/19/11 toegevoegd Chronodot
*/
#include < Stepper.h >
#include < Wire.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;
VOID Setup
{
pinMode (ledPin, OUTPUT);
Serial.begin(9600);
Wire.begin();
/EOSC beetje duidelijk
Soms noodzakelijk om ervoor te zorgen dat de klok
op gewoon batterij houdt uitgevoerd. Eenmaal ingesteld,
het zou niet moet worden gereset maar het is een goed
idee om ervoor te zorgen.
Wire.beginTransmission(0x68); adres DS3231
Wire.send(0x0E); Selecteer Registreer
Wire.send(0b00011100); schrijven register bitmap, bit 7 is /EOSC
Wire.endTransmission();
LastMinute = 0;
LastSecond = 0;
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
{
int seconden;
int minuten;
int uur;
verzoek tot het ontvangen van gegevens beginnen bij register 0
Wire.beginTransmission(0x68); 0x68 is DS3231 apparaatadres
Wire.send(0); Start op registreren 0
Wire.endTransmission();
Wire.requestFrom(0x68, 3); drie Aanvraagbytes (seconden, minuten, uren)
while(Wire.available())
{
seconden = Wire.receive(); krijgen seconds
minuten = Wire.receive(); Ontvang minuten
uren = Wire.receive(); uren krijgen
seconden = (((seconds & 0b11110000) >> 4) * 10 + (seconden & 0b00001111)); BCD converteren naar een decimaal getal
minuten = (((minutes & 0b11110000) >> 4) * 10 + (minuten & 0b00001111)); BCD converteren naar een decimaal getal
uren = (((hours & 0b00110000) >> 4) * 10 + (uren & 0b00001111)); BCD converteren naar een decimaal getal (neem aan 24-uurs modus)
Serial.Print(hours); Serial.Print(":"); Serial.Print(minutes); Serial.Print(":"); Serial.println(seconds);
}
ThisMinute = minuten;
ThisSecond = seconden;
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);
}