Menu
CoddyTech

Orologio NeoPixel: i secondi

Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 21 di 24.

L'ultimo progetto è un orologio senza numeri: un anello di 12 NeoPixel, come le 12 ore sul quadrante di un orologio, con ogni lancetta rappresentata da una luce colorata. Il pixel 0 si trova in alto, a ore 12, e i numeri procedono in senso orario. Due pulsanti imposteranno l'ora.

Per prima cosa, la lancetta dei secondi. Un minuto ha 60 secondi e l'anello ha 12 pixel, quindi la lancetta si sposta di un pixel ogni 5 secondi.

seconds % 60 conta da 0 a 59 e poi ricomincia da 0, come i secondi di un orologio. La divisione intera per 5 trasforma i valori da 0 a 59 in valori da 0 a 11:

unsigned long seconds = millis() / 1000;
int secondPixel = (seconds % 60) / 5;

A ogni passaggio di loop(), disegna l'anello da zero: ring.clear(), imposta il pixel della lancetta, ring.show(). Senza la cancellazione, le posizioni precedenti restano illuminate e l'anello si riempie. Dieci ridisegni al secondo sono più che sufficienti, quindi il codice iniziale termina con delay(100).

challenge icon

Sfida

Medio

L'anello è sul pin 6. Disegna la lancetta dei secondi:

  • calcola i secondi trascorsi dall'accensione con millis() / 1000
  • il pixel della lancetta è (seconds % 60) / 5
  • cancella l'anello, illumina quel pixel di blu con ring.Color(0, 0, 255) e mostralo

Mantieni il delay(100). Premi Esegui e osserva la lancetta girare, poi premi Verifica.

Provalo tu

#include <Adafruit_NeoPixel.h>

const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);

void setup() {
  ring.begin();
}

void loop() {
  // calcola la posizione della lancetta dei secondi e disegnala in blu

  delay(100);  // ridisegna dieci volte al secondo
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Progetti

Esercitati da solo: Playground Arduino