Menu
CoddyTech

Đồng hồ NeoPixel: giây

Thuộc phần Dự án trong hành trình Arduino của Coddy. Bài học 21 trên 24.

Dự án cuối cùng là một chiếc đồng hồ không có số: một vòng gồm 12 NeoPixel, như 12 giờ trên mặt đồng hồ, mỗi kim là một đèn màu. Pixel 0 nằm ở trên cùng, tại vị trí 12 giờ, và các số chạy theo chiều kim đồng hồ. Hai nút sẽ dùng để chỉnh giờ.

Đầu tiên là kim giây. Một phút có 60 giây và vòng có 12 pixel, vì vậy kim di chuyển một pixel sau mỗi 5 giây.

seconds % 60 đếm từ 0 đến 59 rồi bắt đầu lại từ 0, giống như số giây trên đồng hồ. Phép chia lấy phần nguyên cho 5 chuyển các giá trị từ 0 đến 59 thành từ 0 đến 11:

unsigned long seconds = millis() / 1000;
int secondPixel = (seconds % 60) / 5;

Ở mỗi lượt chạy của loop(), hãy vẽ lại vòng từ đầu: ring.clear(), đặt pixel của kim, rồi gọi ring.show(). Nếu không xóa, các vị trí cũ vẫn sáng và vòng sẽ dần sáng kín. Vẽ lại 10 lần mỗi giây là đủ, vì vậy đoạn code khởi đầu kết thúc bằng delay(100).

challenge icon

Thử thách

Trung bình

Vòng đèn được nối với chân 6. Vẽ kim giây:

  • tính số giây kể từ khi bật nguồn bằng millis() / 1000
  • điểm ảnh của kim là (seconds % 60) / 5
  • xóa vòng đèn, bật điểm ảnh đó màu xanh lam bằng ring.Color(0, 0, 255) rồi hiển thị

Giữ nguyên delay(100). Nhấn Chạy và quan sát kim quay một vòng, rồi nhấn Kiểm tra.

Tự làm thử

#include <Adafruit_NeoPixel.h>

const int ringPin = 6;
const int pixelCount = 12;
Adafruit_NeoPixel ring(pixelCount, ringPin, NEO_GRB + NEO_KHZ800);

void setup() {
  ring.begin();
}

void loop() {
  // Xác định vị trí kim giây và vẽ kim bằng màu xanh dương

  delay(100);  // Vẽ lại mười lần mỗi giây
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Dự án

Tự luyện tập: Playground Arduino