Jam NeoPixel: Menggabungkan Jarum
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 23 dari 24.
Jarum jam berwarna merah. Tampilan jam menunjukkan 12 jam, jadi posisi jam adalah (now / 3600) % 12: 0 hingga 11, dengan 0 berarti pukul 12. Itu sudah merupakan nomor piksel.
Sekarang jarum-jarum bisa bertemu. Pada pukul 10:24:52, jarum detik berada di piksel 10, tepat di atas jarum jam. Jika digambar satu per satu, jarum yang digambar belakangan menutupi jarum sebelumnya dan satu jarum menghilang.
Cahaya bisa dicampur sebagai gantinya. Beri tiap jarum bagian warnanya sendiri (merah untuk jam, hijau untuk menit, biru untuk detik), lalu bentuk setiap piksel dari jarum-jarum yang ada di sana:
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));
}Saat jarum-jarum bertemu, bagian warnanya dijumlahkan: merah dan biru menghasilkan magenta, hijau dan biru menghasilkan cyan, merah dan hijau menghasilkan kuning. Setiap piksel diatur pada setiap putaran, jadi perulangan ini juga menggantikan ring.clear().
Tantangan
SulitTambahkan jarum jam dan campurkan jarum-jarumnya:
- jam adalah
(now / 3600) % 12, digambar pada piksel tersebut - bangun setiap piksel dalam perulangan
for: merah 255 jika jarum jam berada di sana, hijau 255 untuk jarum menit, biru 255 untuk jarum detik
Tekan Jalankan: jam dimulai pada 10:24:50 dengan jarum detik dan jarum jam bercampur. Lalu tekan Periksa.
Coba sendiri
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// Waktu awal jam, dalam detik sejak tengah malam: 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
void setup() {
ring.begin();
}
void loop() {
unsigned long now = startTime + millis() / 1000; // waktu saat ini, dalam detik
int seconds = now % 60;
int minutes = (now / 60) % 60;
ring.clear();
ring.setPixelColor(seconds / 5, ring.Color(0, 0, 255)); // jarum detik: biru
ring.setPixelColor(minutes / 5, ring.Color(0, 255, 0)); // jarum menit: hijau
ring.show();
delay(100); // gambar ulang sepuluh kali per detik
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Proyek
6Jam NeoPixel
Jam NeoPixel: DetikJam NeoPixel: MenitJam NeoPixel: Menggabungkan JarumJam NeoPixel: Atur WaktuLatihan sendiri: Playground Arduino