Menu
CoddyTech

Vòng cầu vồng

Thuộc phần Màn hình và cảm biến trong hành trình Arduino của Coddy. Bài học 17 trên 24.

Chọn màu đỏ, xanh lá và xanh dương cho cầu vồng thật khó. Sắc độ dễ hơn: một con số chạy quanh vòng màu, từ đỏ qua vàng, xanh lá, lục lam, xanh dương và đỏ tươi, rồi quay lại đỏ.

ring.ColorHSV(hue) chuyển sắc độ thành màu. Sắc độ nằm trong khoảng từ 0 đến 65535: 0 là màu đỏ, khoảng 21845 là màu xanh lá, khoảng 43690 là màu xanh dương, còn 65536 sẽ lại là màu đỏ.

Để trải một cầu vồng trên 16 điểm ảnh, hãy tăng sắc độ của mỗi điểm ảnh thêm 65536 / 16 = 4096 so với điểm ảnh trước đó. Điểm ảnh 15 cần giá trị 61440, vượt quá sức chứa của int, vì vậy hãy lưu sắc độ trong một long và viết số đó thành 4096L; chữ L cũng khiến phép nhân dùng long:

for (int i = 0; i < 16; i++) {
  long hue = i * 4096L;
  ring.setPixelColor(i, ring.ColorHSV(hue));
}
ring.show();
challenge icon

Thử thách

Trung bình

Tô màu cầu vồng quanh vòng đèn:

  • pixel 0 màu đỏ (hue 0)
  • mỗi pixel tiếp theo tiến thêm 4096 đơn vị quanh vòng màu, bằng ring.ColorHSV()
  • như vậy, 16 pixel sẽ đi hết một vòng

Nhấn Chạy, rồi nhấn Kiểm tra.

Tự làm thử

#include <Adafruit_NeoPixel.h>

// 16 điểm ảnh, dữ liệu truyền qua chân 6
Adafruit_NeoPixel ring(16, 6, NEO_GRB + NEO_KHZ800);

void setup() {
  ring.begin();

  // Gán cho mỗi điểm ảnh một sắc màu riêng, điểm ảnh 0 có màu đỏ

  ring.show();
}

void loop() {
}
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 Màn hình và cảm biến

Tự luyện tập: Playground Arduino