Giai điệu từ hai mảng
Thuộc phần Đầu ra trong hành trình Arduino của Coddy. Bài học 14 trên 24.
Các nốt trong một giai điệu không có cùng độ dài. Một mảng thứ hai có thể lưu thời lượng tương ứng với các nốt: notes[i] và durations[i] đi cùng nhau.
int notes[] = {262, 262, 392, 392, 440, 440, 392};
int durations[] = {400, 400, 400, 400, 400, 400, 800};Hai nốt giống nhau phát liên tiếp sẽ hòa thành một nốt dài. Một khoảng lặng ngắn sau mỗi nốt giúp tách chúng ra, vì vậy hãy phát nốt trong khoảng thời lượng của nó rồi chờ thêm một chút:
tone(8, notes[i], durations[i]);
delay(durations[i] + 50);Thời lượng sẽ dừng nốt, còn 50 ms thêm vào là khoảng ngắt trước nốt tiếp theo.
Khi chỉ số vượt quá nốt cuối cùng, giai điệu đã kết thúc: hãy chờ một chút rồi mới phát lại để giai điệu không chồng lên chính nó.
Thử thách
Trung bìnhPhát câu đầu tiên của Twinkle Twinkle Little Star trên chân 8:
- nốt: 262, 262, 392, 392, 440, 440, 392
- thời lượng: mỗi nốt 400 ms, riêng nốt cuối cùng 800 ms
- sau mỗi nốt, chờ thêm 50 ms so với thời lượng của nốt đó
- sau nốt cuối cùng, chờ thêm một giây rồi bắt đầu lại
Nhấn Chạy, rồi nhấn Kiểm tra.
Tự làm thử
const int buzzerPin = 8;
// Tạo các mảng (array) nốt nhạc và thời lượng, cùng chỉ số (index) ở đây
void setup() {
}
void loop() {
// Phát một nốt nhạc, chờ trong thời lượng của nốt đó cộng thêm 50 ms, rồi chuyển sang nốt tiếp theo
// Sau nốt nhạc cuối, chờ một giây rồi bắt đầu lại
}
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 Đầu ra
Tự luyện tập: Playground Arduino