Chọn bằng switch
Thuộc phần Định thời không dùng delay trong hành trình Arduino của Coddy. Bài học 8 trên 18.
Khi một biến có thể nhận nhiều giá trị và mỗi giá trị cần đoạn code riêng, chuỗi if và else if sẽ trở nên dài dòng. switch làm cùng việc đó và có cách viết giống một danh sách:
switch (zone) {
case 0:
// chạy khi zone là 0
break;
case 1:
// chạy khi zone là 1
break;
default:
// chạy khi không có trường hợp nào khớp (không bắt buộc)
break;
}switch chuyển đến case có số khớp và chạy các dòng bên dưới. break thoát khỏi switch. Nếu quên break, bo mạch sẽ tiếp tục chạy cả các dòng của case tiếp theo. Hiện tượng này gọi là rơi xuyên.
Ở đây, núm vặn được chia thành bốn vùng. analogRead() cho giá trị từ 0 đến 1023, và phép chia cho 256 cho ra một số nguyên: 0 ở một phần tư phía dưới, tiếp theo là 1, 2 và 3 ở phía trên cùng. Mỗi vùng hiển thị một màu riêng trên đèn LED RGB.
Thử thách
DễBiến núm xoay thành bộ chọn màu bằng switch:
- vùng 0: đỏ (đã viết sẵn)
- vùng 1: xanh lá
- vùng 2: xanh dương
- vùng 3: trắng (bật cả ba)
Dùng setColor() và kết thúc mỗi trường hợp bằng break;. Nhấn Chạy, xoay núm, rồi nhấn Kiểm tra.
Tự làm thử
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void setColor(int red, int green, int blue) {
digitalWrite(redPin, red);
digitalWrite(greenPin, green);
digitalWrite(bluePin, blue);
}
void loop() {
int zone = analogRead(A0) / 256; // 0, 1, 2 hoặc 3
switch (zone) {
case 0:
setColor(HIGH, LOW, LOW); // đỏ
break;
// thêm các vùng 1, 2 và 3 vào đây
}
}
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 Định thời không dùng delay
Tự luyện tập: Playground Arduino