Jam NeoPixel: Atur Waktu
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 24 dari 24.
Jam selalu dimulai pada 10:24:50, yang tepat hanya sekali sehari. Dua tombol memperbaikinya: tombol merah pada pin 2 memajukan jam satu jam, tombol hijau pada pin 3 memajukannya 5 menit, satu piksel pada jarum menit.
Waktu adalah satu angka, jadi mengaturnya berarti menambahkan detik. Simpan penambahan dari tombol dalam variabel dan sertakan dalam penjumlahan:
unsigned long adjust = 0; // detik yang ditambahkan lewat tombol
unsigned long now = startTime + adjust + millis() / 1000;Satu jam adalah 3600 detik dan 5 menit adalah 300 detik. Hitung setiap tekanan satu kali, saat tombol ditekan: LOW sekarang dan HIGH sebelumnya. Menambahkan nilai pada setiap putaran saat tombol ditekan akan membuat jam berputar terus. Tombol ini tidak memantul.
int hourState = digitalRead(hourButton);
if (hourState == LOW && lastHour == HIGH) {
adjust = adjust + 3600;
}
lastHour = hourState;Setiap jarum berasal dari now, jadi semuanya bergerak mengikuti, dan sisanya membungkus jam setelah 11 serta menit setelah 55.
Tantangan
SedangBuat waktu dapat diatur:
- pin 2 dan 3 adalah
INPUT_PULLUP - menekan pin 2 menambahkan 3600 detik, menekan pin 3 menambahkan 300 detik, masing-masing dihitung sekali saat tombol ditekan
- tambahkan detik tersebut ke
now
Tekan Run dan atur jam ke waktu yang kamu inginkan, lalu tekan Check.
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;
int hours = (now / 3600) % 12;
int secondPixel = seconds / 5;
int minutePixel = minutes / 5;
int hourPixel = hours;
// Setiap piksel mendapat warna merah dari jarum jam, hijau dari jarum menit
// dan biru dari jarum detik, sehingga warna jarum pada satu piksel bercampur.
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));
}
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