Horloge NeoPixel : régler l’heure
Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 24 sur 24.
L’horloge démarre toujours à 10:24:50, ce qui est juste une fois par jour. Deux boutons corrigent cela : le rouge sur la broche 2 avance l’horloge d’une heure, le vert sur la broche 3 de 5 minutes, soit un pixel de l’aiguille des minutes.
L’heure est un seul nombre, donc la régler revient à ajouter des secondes. Conservez dans une variable ce que les boutons ont ajouté et incluez-le dans la somme :
unsigned long adjust = 0; // secondes ajoutées par les boutons
unsigned long now = startTime + adjust + millis() / 1000;Une heure correspond à 3600 secondes et 5 minutes à 300. Comptabilisez chaque pression une seule fois, au moment où le bouton est enfoncé : LOW maintenant et HIGH la dernière fois. Ajouter à chaque passage tant que le bouton est maintenu ferait tourner l’horloge à toute vitesse. Ces boutons ne rebondissent pas.
int hourState = digitalRead(hourButton);
if (hourState == LOW && lastHour == HIGH) {
adjust = adjust + 3600;
}
lastHour = hourState;Chaque aiguille est calculée à partir de now, elles suivent donc toutes le réglage, et les restes font revenir les heures après 11 et les minutes après 55.
Défi
MoyenPermettez de régler l’heure :
- les broches 2 et 3 sont configurées en
INPUT_PULLUP - un appui sur la broche 2 ajoute 3600 secondes, un appui sur la broche 3 en ajoute 300, chaque appui étant compté une seule fois lorsque le bouton est enfoncé
- ajoutez ces secondes à
now
Appuyez sur Run et réglez l’horloge à l’heure voulue, puis appuyez sur Check.
Essayez vous-même
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// L’heure de départ de l’horloge, en secondes depuis minuit : 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
void setup() {
ring.begin();
}
void loop() {
unsigned long now = startTime + millis() / 1000; // l’heure de la journée, en secondes
int seconds = now % 60;
int minutes = (now / 60) % 60;
int hours = (now / 3600) % 12;
int secondPixel = seconds / 5;
int minutePixel = minutes / 5;
int hourPixel = hours;
// Chaque pixel reçoit le rouge de l’aiguille des heures et le vert de l’aiguille des minutes
// et le bleu de l’aiguille des secondes, de sorte que les couleurs des aiguilles se mélangent sur un même pixel.
for (int i = 0; i < pixelCount; i++) {
int r = 0;
int g = 0;
int b = 0;
if (i == hourPixel) {
r = 255;
}
if (i == minutePixel) {
g = 255;
}
if (i == secondPixel) {
b = 255;
}
ring.setPixelColor(i, ring.Color(r, g, b));
}
ring.show();
delay(100); // redessiner dix fois par seconde
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Projets
3Capteur de stationnement
Capteur de stationnement : DistanceCapteur de stationnement : LumièresCapteur de stationnement : BipsCapteur de stationnement : Affichage6Horloge NeoPixel
Horloge NeoPixel : les secondesHorloge NeoPixel : les minutesHorloge NeoPixel : mélanger les aiguillesHorloge NeoPixel : régler l’heureEntraînez-vous par vous-même : Playground Arduino