Menu
CoddyTech

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.

challenge icon

Thử thách

Trung bình

Hãy làm cho bốn màu phát ra âm thanh:

  • trong setup(), vòng lặp for đặt các chân LED thành đầu ra và các chân nút thành INPUT_PULLUP
  • khi nút i được nhấn, bật đèn ledPins[i] và phát notes[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

}
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