Relógio NeoPixel: Combinando os ponteiros
Parte da seção Projetos do Journey de Arduino da Coddy. Lição 23 de 24.
O ponteiro das horas é vermelho. O mostrador de um relógio mostra 12 horas, então a hora é (now / 3600) % 12: de 0 a 11, em que 0 corresponde às 12 horas. Isso já é um número de pixel.
Agora os ponteiros podem se encontrar. Às 10:24:52, o ponteiro dos segundos está no pixel 10, sobre o ponteiro das horas. Desenhados um após o outro, o segundo cobre o primeiro e um ponteiro desaparece.
A luz pode se misturar. Em vez disso, dê a cada ponteiro sua própria componente de cor (vermelho para as horas, verde para os minutos, azul para os segundos) e monte cada pixel com base nos ponteiros que estão nele:
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));
}Onde os ponteiros se encontram, as componentes se somam: vermelho e azul formam magenta, verde e azul formam ciano, vermelho e verde formam amarelo. Cada pixel é configurado em cada passagem, então o loop também substitui ring.clear().
Desafio
DifícilAdicione o ponteiro das horas e misture os ponteiros:
- a hora é
(now / 3600) % 12, desenhada nesse pixel - construa cada pixel em um loop
for: vermelho 255 se o ponteiro das horas estiver ali, verde 255 para o ponteiro dos minutos, azul 255 para o ponteiro dos segundos
Pressione Run: o relógio começa às 10:24:50 com os ponteiros dos segundos e das horas misturados. Depois, Check.
Experimente você mesmo
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// O horário em que o relógio começa, em segundos desde a meia-noite: 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
void setup() {
ring.begin();
}
void loop() {
unsigned long now = startTime + millis() / 1000; // a hora do dia, em segundos
int seconds = now % 60;
int minutes = (now / 60) % 60;
ring.clear();
ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255)); // ponteiro dos segundos: azul
ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0)); // ponteiro dos minutos: verde
ring.show();
delay(100); // redesenhar dez vezes por segundo
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Projetos
3Sensor de Estacionamento
Sensor de Estacionamento: DistânciaSensor de Estacionamento: LuzesSensor de Estacionamento: BipesSensor de Estacionamento: Visor6Relógio NeoPixel
Relógio NeoPixel: SegundosRelógio NeoPixel: MinutosRelógio NeoPixel: Combinando os ponteirosRelógio NeoPixel: Ajustar a horaPratique por conta própria: Playground de Arduino