Étape 6: Programmation de l’Arduino
Je ne vais pas aller sur comment programmer un Arduino, il y a beaucoup d’exemple en ligne. J’ai utilisé l’exemple de bouton moteur dans l’IDE Arduino comme base pour la conduite des moteurs pas à pas. A partir de là, j’ai modifié le code pour piloter les moteurs pas à pas.
Quand une horloge de programmation, vous voulez évidemment votre horloge pour exécuter et le pas ralentit. Mon premier hack le code, mon horloge a perdu environ 15 minutes pendant la nuit. Ce n’était pas acceptable. L’algorithme pour que le code devait compter jusqu'à 60 secondes, cochez l’aiguille des minutes, puis compter 5 minutes et cochez l’aiguille des heures. Pas le plus élégant des solutions.
Ce que j’ai fait ensuite consistait donc à utiliser une bibliothèque de date/heure et garder une trace de la dernière minute, puis je voudrais vérifier l’heure toutes les 5 secondes ou ainsi et si la minute change alors je voudrais coche l’horloge. Toutes les 5 minutes, j’ai cocheront l’aiguille des heures. J’ai aussi mis le pin13 led clignote toutes les secondes. Vous devrez installer la bibliothèque pour exécuter le code de la pde. Elle se télécharge ici http://www.arduino.cc/playground/Code/Time
Code (couper et coller) ou télécharger le PDE ci-dessous :
/*
* gearclock.pde
*
* Brian Wagner
* LVL1 - Hackerspace de Louisville
* www.lvl1.org
* 10/09/11
* 18/09/11 retravaillé pour utiliser time_t
*/
#include < Stepper.h >
#include < Time.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 ;
time_t t ;
void setup()
{
pinMode (ledPin, sortie) ;
setTime(1,1,1,1,1,1) ; régler l’heure au 1er janvier 2001
Il n’importe pas vraiment ce que l’heure est réglée
nous vérifions pour voir si une minute a passé.
t = now() ;
LastMinute = minute(t) ;
LastSecond = second(t) ;
à 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()
{
t = now() ;
ThisMinute = minute(t) ;
ThisSecond = second(t) ;
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) ;
}