Orologio NeoPixel: combinare le lancette
Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 23 di 24.
La lancetta delle ore è rossa. Il quadrante mostra 12 ore, quindi l'ora è (now / 3600) % 12: da 0 a 11, dove 0 corrisponde alle 12. È già un numero di pixel.
Ora le lancette possono incontrarsi. Alle 10:24:52 la lancetta dei secondi è sul pixel 10, sopra quella delle ore. Se le disegni una dopo l'altra, la seconda copre la prima e una lancetta scompare.
Invece, i colori possono mescolarsi. Assegna a ogni lancetta una componente di colore (rosso per le ore, verde per i minuti, blu per i secondi) e componi ogni pixel in base alle lancette che si trovano su di esso:
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));
}Nei punti in cui le lancette si incontrano, le componenti si sommano: rosso e blu danno magenta, verde e blu ciano, rosso e verde giallo. Ogni pixel viene impostato a ogni passaggio, quindi il ciclo sostituisce anche ring.clear().
Sfida
DifficileAggiungi la lancetta delle ore e mescola le lancette:
- l’ora è
(now / 3600) % 12, disegnata su quel pixel - crea ogni pixel in un ciclo
for: rosso 255 se c’è la lancetta delle ore, verde 255 per la lancetta dei minuti, blu 255 per la lancetta dei secondi
Premi Run: l’orologio parte da 10:24:50 con le lancette dei secondi e delle ore sovrapposte. Poi premi Check.
Provalo tu
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// L'ora da cui parte l'orologio, in secondi dalla mezzanotte: 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'ora del giorno, in secondi
int seconds = now % 60;
int minutes = (now / 60) % 60;
ring.clear();
ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255)); // lancetta dei secondi: blu
ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0)); // lancetta dei minuti: verde
ring.show();
delay(100); // ridisegna dieci volte al secondo
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progetti
3Sensore di parcheggio
Sensore di parcheggio: distanzaSensore di parcheggio: luciSensore di parcheggio: segnali acusticiSensore di parcheggio: display6Orologio NeoPixel
Orologio NeoPixel: i secondiOrologio NeoPixel: i minutiOrologio NeoPixel: combinare le lancetteOrologio NeoPixel: impostare l'oraEsercitati da solo: Playground Arduino