Zegar NeoPixel: mieszanie wskazówek
Część sekcji Projekty ścieżki Arduino w Coddy. Lekcja 23 z 24.
Wskazówka godzinowa jest czerwona. Tarcza zegara pokazuje 12 godzin, więc godzina to (now / 3600) % 12: od 0 do 11, gdzie 0 oznacza godzinę 12. To już jest numer piksela.
Teraz wskazówki mogą się spotkać. O 10:24:52 wskazówka sekundowa znajduje się na pikselu 10, na wskazówce godzinowej. Jeśli rysujemy je jedna po drugiej, druga zakrywa pierwszą i jedna wskazówka znika.
Zamiast tego można mieszać światło. Przypisz każdej wskazówce własny składnik koloru (czerwony dla godzin, zielony dla minut, niebieski dla sekund) i twórz każdy piksel na podstawie wskazówek, które się na nim znajdują:
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));
}W miejscu, gdzie wskazówki się spotykają, składniki się sumują: czerwony i niebieski dają magentę, zielony i niebieski cyjan, a czerwony i zielony żółty. Każdy piksel jest ustawiany przy każdym przebiegu, więc pętla zastępuje również ring.clear().
Wyzwanie
TrudnyDodaj wskazówkę godzinową i połącz wskazówki:
- godzina to
(now / 3600) % 12, wyświetlana na tym pikselu - zbuduj każdy piksel w pętli
for: czerwony 255, jeśli znajduje się tam wskazówka godzinowa, zielony 255 dla wskazówki minutowej, niebieski 255 dla wskazówki sekundowej
Naciśnij Uruchom: zegar zaczyna od 10:24:50, a wskazówki sekundowa i godzinowa są połączone. Następnie naciśnij Sprawdź.
Spróbuj swoich sił
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// Czas początkowy zegara, w sekundach od północy: 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
void setup() {
ring.begin();
}
void loop() {
unsigned long now = startTime + millis() / 1000; // pora dnia w sekundach
int seconds = now % 60;
int minutes = (now / 60) % 60;
ring.clear();
ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255)); // wskazówka sekundowa: niebieska
ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0)); // wskazówka minutowa: zielona
ring.show();
delay(100); // odświeżaj dziesięć razy na sekundę
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projekty
3Czujnik parkowania
Czujnik parkowania: odległośćCzujnik parkowania: światłaCzujnik parkowania: sygnały dźwiękoweCzujnik parkowania: wyświetlacz6Zegar NeoPixel
Zegar NeoPixel: sekundyZegar NeoPixel: minutyZegar NeoPixel: mieszanie wskazówekZegar NeoPixel: ustawianie godzinyPoćwicz samodzielnie: Edytor online Arduino