Horloge NeoPixel : mélanger les aiguilles
Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 23 sur 24.
L’aiguille des heures est rouge. Un cadran affiche 12 heures, donc l’heure est (now / 3600) % 12 : de 0 à 11, où 0 correspond à 12 heures. C’est déjà un numéro de pixel.
Maintenant, les aiguilles peuvent se rejoindre. À 10:24:52, l’aiguille des secondes est sur le pixel 10, par-dessus l’aiguille des heures. Dessinée l’une après l’autre, la seconde recouvre la première et une aiguille disparaît.
La lumière peut plutôt se mélanger. Attribue à chaque aiguille sa propre composante de couleur (rouge pour les heures, vert pour les minutes, bleu pour les secondes) et compose chaque pixel à partir des aiguilles qui s’y trouvent :
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));
}Là où les aiguilles se rejoignent, les composantes s’additionnent : le rouge et le bleu donnent du magenta, le vert et le bleu du cyan, le rouge et le vert du jaune. Chaque pixel est défini à chaque passage, donc la boucle remplace aussi ring.clear().
Défi
DifficileAjoute l’aiguille des heures et mélange les aiguilles :
- l’heure est
(now / 3600) % 12, dessinée sur ce pixel - construis chaque pixel dans une boucle
for: rouge à 255 si l’aiguille des heures est là, vert à 255 pour l’aiguille des minutes, bleu à 255 pour l’aiguille des secondes
Appuie sur Exécuter : l’horloge démarre à 10:24:50 avec les aiguilles des secondes et des heures mélangées. Puis appuie sur Vérifier.
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;
ring.clear();
ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255)); // aiguille des secondes : bleue
ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0)); // aiguille des minutes : verte
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