Simon: Nút bấm và nốt nhạc
Thuộc phần Dự án trong hành trình Arduino của Coddy. Bài học 13 trên 24.
Simon là một trò chơi trí nhớ: bảng phát một mẫu đèn màu và nốt nhạc, rồi bạn lặp lại mẫu đó bằng các nút. Mỗi vòng, mẫu tăng thêm một phần tử cho đến khi bạn mắc lỗi. Có bốn màu, mỗi màu có một nút, một đèn LED và một nốt nhạc.
Với bốn thứ thuộc mỗi loại, mảng giúp đoạn code ngắn gọn. Phần tử ở chỉ số 0 của mỗi mảng là màu đỏ, chỉ số 1 là màu xanh lá, chỉ số 2 là màu xanh dương và chỉ số 3 là màu vàng, vì vậy một số, i, đại diện cho một màu ở mọi nơi:
const int ledPins[4] = {9, 10, 11, 12};
const int buttonPins[4] = {2, 3, 4, 5};
const int notes[4] = {262, 330, 392, 523};Vòng lặp for kiểm tra cả bốn nút. Xử lý ở hai thời điểm: khi nút được nhấn xuống (LOW lúc này, HIGH ở lần đọc trước) và khi nút được thả ra (HIGH lúc này, LOW ở lần đọc trước). Mảng lastState lưu lần đọc trước của mỗi nút. Các bước sau sẽ tính một lần nhấn khi nút được thả ra. Các nút này không bị nảy, nên chỉ cần kiểm tra cạnh chuyển trạng thái.
Thử thách
Trung bìnhHãy làm cho bốn màu phát ra âm thanh:
- trong
setup(), vòng lặpforđặt các chân LED thành đầu ra và các chân nút thànhINPUT_PULLUP - khi nút
iđược nhấn, bật đènledPins[i]và phátnotes[i]trên chân 8 - khi nút được thả ra, tắt đèn LED và gọi
noTone()
Nhấn Chạy, nhấn các nút để chơi, rồi nhấn Kiểm tra.
Tự làm thử
// Mỗi màu một phần tử: đỏ, xanh lá, xanh dương, vàng
const int ledPins[4] = {9, 10, 11, 12};
const int buttonPins[4] = {2, 3, 4, 5};
const int notes[4] = {262, 330, 392, 523}; // C, E, G và C cao
const int buzzerPin = 8;
int lastState[4] = {HIGH, HIGH, HIGH, HIGH}; // giá trị đọc gần nhất của từng nút
void setup() {
// LED là đầu ra, các nút dùng INPUT_PULLUP
}
void loop() {
// với mỗi nút: khi nhấn xuống, bật LED và phát nốt nhạc tương ứng;
// khi thả nút ra, tắt LED và âm thanh
}
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
1Đèn giao thông
Chu kỳ đèn giao thôngĐèn giao thông dùng millis()Nút qua đườngTín hiệu đi bộ và còi báo4Simon
Simon: Nút bấm và nốt nhạcSimon: Trình tự ngẫu nhiênSimon: Lặp lại mẫuSimon: Trò chơi hoàn chỉnhTự luyện tập: Playground Arduino