Tác giả: Thợ điện vô duyên - Phạm minh liêm
Hé lô anh em, Vô Duyên lại lên đây!
Bữa nay anh em mình lại tỉ tê chuyện nghề ha.
Anh em muốn tui viết bài thứ tám trong chuyên mục "Vô Duyên - Hỏi Đáp Về Smart Home" với chủ đề "Tự học vi điều khiển" đúng không?
Vụ này thì tui khoái nè, vì nó là cái "cần câu cơm" của tui mà.
Ở bài trước, anh em mình đã biết cách điều chỉnh độ sáng đèn LED.
Giờ mình nâng cấp lên một chút, học cách điều khiển nhiều đèn LED cùng lúc.
Cái này rất hữu ích, giống như anh em mình muốn làm một cái đèn nhấp nháy, hay một cái bảng quảng cáo đèn LED vậy đó.
Thôi, không nói nhiều nữa, anh em mình bắt đầu thôi.
Bài 8: Viết chương trình điều khiển nhiều đèn LED và các hiệu ứng đèn (sử dụng mảng)
1. Chuẩn bị "đồ nghề"
Để làm bài này, anh em mình cần có:
- Một bo Arduino Uno.
- Một cái breadboard.
- Khoảng 5-10 cái đèn LED (mỗi cái một màu thì càng hay).
- 5-10 cái điện trở 220 Ohm.
- Vài sợi dây nối.
2. Mạch điện (đấu dây)
Nói thiệt, cái này quan trọng lắm, anh em làm theo cho kỹ.
- Nối đèn LED:
- Nối chân dài (anode) của mỗi cái đèn LED vào một chân digital khác nhau trên bo Arduino (từ chân số 2 đến chân số 11) qua một điện trở 220 Ohm.
- Nối chung chân âm:
- Nối tất cả các chân ngắn (cathode) của các đèn LED lại với nhau, rồi nối xuống chân GND của Arduino.
3. Lập trình và giải thích
Ở bài này, anh em mình sẽ xài một cái khái niệm mới, tên là mảng (array).
Nói thẳng luôn, mảng giống như một cái "túi" vậy đó.
Thay vì anh em mình phải khai báo từng cái chân đèn LED một (int den1 = 2; int den2 = 3; ...), thì giờ mình chỉ cần dùng một câu lệnh để cho hết vào một cái túi là xong.
Giờ, anh em mình mở phần mềm Arduino IDE lên, rồi copy cái đoạn code dưới đây vào:
// Khai báo mảng để lưu các chân của đèn LED
int chanDenLed[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
// Khai báo số lượng đèn LED
int soLuongDenLed = 10;
void setup() {
// Dùng vòng lặp để thiết lập tất cả các chân đèn LED là OUTPUT
for (int i = 0; i < soLuongDenLed; i++) {
pinMode(chanDenLed[i], OUTPUT);
}
}
void loop() {
// Hiệu ứng 1: Đèn sáng dần từ 1 đến 10
for (int i = 0; i < soLuongDenLed; i++) {
digitalWrite(chanDenLed[i], HIGH); // Bật đèn
delay(100); // Đợi 0.1 giây
}
// Tạm dừng một chút
delay(500);
// Hiệu ứng 2: Đèn tắt dần từ 10 về 1
for (int i = soLuongDenLed - 1; i >= 0; i--) {
digitalWrite(chanDenLed[i], LOW); // Tắt đèn
delay(100); // Đợi 0.1 giây
}
// Tạm dừng một chút
delay(500);
// Hiệu ứng 3: Đèn chớp tắt xen kẽ
for (int i = 0; i < soLuongDenLed; i++) {
if (i % 2 == 0) { // Nếu là đèn chẵn
digitalWrite(chanDenLed[i], HIGH);
} else { // Nếu là đèn lẻ
digitalWrite(chanDenLed[i], LOW);
}
}
delay(500);
for (int i = 0; i < soLuongDenLed; i++) {
digitalWrite(chanDenLed[i], LOW);
}
delay(500);
for (int i = 0; i < soLuongDenLed; i++) {
if (i % 2 != 0) { // Nếu là đèn lẻ
digitalWrite(chanDenLed[i], HIGH);
} else { // Nếu là đèn chẵn
digitalWrite(chanDenLed[i], LOW);
}
}
delay(500);
for (int i = 0; i < soLuongDenLed; i++) {
digitalWrite(chanDenLed[i], LOW);
}
delay(500);
}
Giải thích:
- "int chanDenLed[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};":
- Đây là cách anh em mình khai báo một cái mảng để chứa các số chân của đèn LED.
- "for (int i = 0; i < soLuongDenLed; i++) { ... }":
- Cái này gọi là vòng lặp.
- Giống như anh em mình làm việc vậy đó, cứ lặp đi lặp lại một công việc cho tới khi hoàn thành.
- "digitalWrite(chanDenLed[i], HIGH);":
- Cái này là câu lệnh hay nè.
- chanDenLed[i] có nghĩa là "lấy cái chân thứ "i" trong cái mảng chanDenLed ra".
Tổng kết
Tóm lại, bài này anh em mình đã biết cách điều khiển nhiều đèn LED bằng mảng và vòng lặp.
Cái này rất quan trọng, nó sẽ giúp anh em mình làm được nhiều hiệu ứng đèn đẹp mắt, ứng dụng trong các dự án smart home như đèn trang trí, đèn cảnh báo.
Nói nhiêu đó đủ rồi.
Hẹn anh em ở bài viết tiếp theo, mình sẽ học cách xài màn hình LCD để hiển thị thông tin!

Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.