Étape 7: Brancher un Chronodot.
Je l’ai trouvé très facile à programmer. J’ai juste utilisé le programme de test en bas de la page de documentation comme base.
Pour connecter le chronodot, j’ai fait une couple de fils pour relier les broches 5v, gnd, scl et sda sur le chronodot. J’ai accroché les connecteurs d’alimentation et de masse sur la chronodot aux connecteurs 5V et gnd sur l’Arduino. La broche SDA se connecte à la borne analogique 4 et la broche SCL va à broche analogique 5. Voici une ressource pour accrocher la Chronodot : http://www.codingcolor.com/microcontrollers/an-arduino-lcd-clock-using-a-chronodot-rtc/
Puis j’ai piraté le code de test chronodot dans mon programme et à l’extérieur, que ça s’est passé !
Voici le code, ou vous pouvez télécharger ci-dessous.
/*
* gearclock_Chronodot.pde
*
* Brian Wagner
* LVL1 - Hackerspace de Louisville
* www.lvl1.org
* 10/09/11
* 18/09/11 retravaillé pour utiliser time_t
* Chronodot a ajouté 19/09/11
*/
#include < Stepper.h >
#include < Wire.h >
#define 20 étapes / / le stepper a 20 pas par tour
int ledPin = 13 ; LED connectée à la broche numérique 13
int LastMinute ;
int ThisMinute ;
int LastSecond ;
int ThisSecond ;
du 21-02485-03 moteurs pas à pas, les couleurs dans l’ordre sont jaune, rouge, noir/blanc, bleu
Heures de moteur pas à pas (étapes, 4, 5, 6, 7) ;
Minutes de stepper (marches, 8, 9, 10, 11) ;
int MinuteCount ;
void setup()
{
pinMode (ledPin, sortie) ;
Serial.Begin(9600) ;
Wire.Begin() ;
claire /EOSC bits
Parfois nécessaire pour s’assurer que l’horloge
continue à fonctionner sur batterie juste. Une fois réglé,
il ne devrait pas besoin d’être remis à zéro, mais c’est une bonne
idée de s’assurer.
Wire.beginTransmission(0x68) ; adresse DS3231
Wire.Send(0x0E) ; en sélectionnant enregistrer
Wire.Send(0b00011100) ; écrire le registre bitmap, bit 7 est /EOSC
Wire.endTransmission() ;
LastMinute = 0 ;
LastSecond = 0 ;
à quelle vitesse il va à l’étape
Minutes.setSpeed(5) ;
Hours.setSpeed(5) ;
tester les minutes et les heures à faire sur que ça va dans le bon sens
Minutes.Step(100) ;
Hours.Step(100) ;
Minutes.Step(4) ;
Hours.Step(4) ;
MinuteCount = 1 ;
}
void loop()
{
int secondes ;
int minutes ;
int heures ;
Envoyer demande de recevoir des données à partir de Registre 0
Wire.beginTransmission(0x68) ; 0x68 est DS3231 adresse de périphérique
Wire.Send(0) ; commencer au registre 0
Wire.endTransmission() ;
Wire.requestFrom(0x68, 3) ; demander à trois octets (secondes, minutes, heures)
while(Wire.available())
{
secondes = Wire.receive() ; Obtenez secondes
minutes = Wire.receive() ; obtenir des minutes
heures = Wire.receive() ; Obtenez heures
secondes = (((seconds & 0b11110000) >> 4) * 10 + (secondes & 0b00001111)) ; convertir BCD décimal
minutes = (((minutes & 0b11110000) >> 4) * 10 + (minutes & 0b00001111)) ; convertir BCD décimal
heures = (((hours & 0b00110000) >> 4) * 10 + (heures & 0b00001111)) ; convertir BCD décimal (suppose que le mode 24 heures)
Serial.Print(hours) ; Serial.Print(":") ; Serial.Print(minutes) ; Serial.Print(":") ; Serial.println(seconds) ;
}
ThisMinute = minutes ;
ThisSecond = secondes ;
Si (ThisSecond! = LastSecond) {}
digitalWrite (ledPin, HIGH) ; la valeur de la LED sur
Delay(200) ; Attendez de 500ms
digitalWrite (ledPin, basse) ; déclencher la LED
LastSecond = ThisSecond ;
}
Si (ThisMinute! = LastMinute) {}
Minutes.Step(2) ;
MinuteCount ++ ;
LastMinute = ThisMinute ;
}
Cochez l’anneau heure toutes les 5 minutes
Si (MinuteCount > 5) {}
Hours.Step(2) ;
MinuteCount = 1 ;
}
Delay(200) ;
}