NeoPixel Saati: Saati Ayarlama
Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 24 / 24.
Saat her zaman 10:24:50'te başlar; bu, günde bir kez doğru saattir. İki düğme bunu düzeltir: 2 numaralı pindeki kırmızı düğme saati bir saat ileri alır, 3 numaralı pindeki yeşil düğme ise 5 dakika, yani dakika kolunun bir pikseli kadar ilerletir.
Saat tek bir sayıdır, bu yüzden ayarlamak saniye eklemek demektir. Düğmelerin eklediği değeri bir değişkende tut ve toplama dahil et:
unsigned long adjust = 0; // düğmelerle eklenen saniyeler
unsigned long now = startTime + adjust + millis() / 1000;Bir saat 3600 saniye, 5 dakika ise 300 saniyedir. Her basışı, düğme aşağı indiğinde bir kez say: şimdi LOW, önceki okumada ise HIGH. Düğme basılı tutulurken her döngüde ekleme yapmak saatin dönüp durmasına yol açar. Bu düğmelerde kontak sıçraması olmaz.
int hourState = digitalRead(hourButton);
if (hourState == LOW && lastHour == HIGH) {
adjust = adjust + 3600;
}
lastHour = hourState;Her kol now değerinden hesaplanır, bu yüzden hepsi birlikte ilerler; kalanlar da saatleri 11'den, dakikaları 55'ten sonra başa sarar.
Görev
OrtaSaati ayarlanabilir hâle getirin:
- 2 ve 3 numaralı pinler
INPUT_PULLUPolarak ayarlanır - 2 numaralı pine basıldığında 3600 saniye, 3 numaralı pine basıldığında 300 saniye eklenir; her düğmeye basma, düğme aşağı indiğinde bir kez sayılır
- bu saniyeleri
nowdeğerine ekleyin
Run düğmesine basın ve saati istediğiniz zamana ayarlayın, ardından Check düğmesine basın.
Kendin dene
#include <Adafruit_NeoPixel.h>
const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);
// Saatin başlangıç zamanı, gece yarısından itibaren saniye cinsinden: 10:24:50
const unsigned long startTime = 10 * 3600UL + 24 * 60 + 50;
void setup() {
ring.begin();
}
void loop() {
unsigned long now = startTime + millis() / 1000; // günün saati, saniye cinsinden
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;
// Her piksel, saat ibresinden kırmızı, dakika ibresinden yeşil
// ve saniye ibresinden mavi renk alır; böylece aynı pikseldeki ibrelerin renkleri karışır.
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); // saniyede on kez yeniden çiz
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Projeler bölümündeki tüm dersler
6NeoPixel Saati
NeoPixel Saati: SaniyelerNeoPixel Saati: DakikalarNeoPixel Saati: Akrep ve Yelkovanı BirleştirmeNeoPixel Saati: Saati AyarlamaKendi başına pratik yap: Arduino playground