用两个数组演奏旋律
本课属于 Coddy Arduino 学习旅程的“输出”单元。第 14 课,共 24 课。
一段旋律中的音符时长并不都相同。可以用第二个数组存储时长,并与音符一一对应:notes[i] 和 durations[i] 是配对的。
int notes[] = {262, 262, 392, 392, 440, 440, 392};
int durations[] = {400, 400, 400, 400, 400, 400, 800};连续播放两个相同的音符,会让它们听起来像一个较长的音符。在每个音符后加一小段静音,就能让它们彼此分开。因此,按音符的时长播放,然后多等一会儿:
tone(8, notes[i], durations[i]);
delay(durations[i] + 50);时长决定音符何时停止,额外的 50 ms 则是播放下一个音符前的间隔。
当索引超过最后一个音符时,旋律就结束了:重新开始播放前,先等待片刻,这样旋律就不会和自身重叠。
挑战
中等在引脚 8 上播放《一闪一闪小星星》的第一句:
- 音符:262,262,392,392,440,440,392
- 时长:每个音符 400 ms,最后一个音符 800 ms
- 每个音符播放后,等待其时长再加 50 ms
- 最后一个音符播放后,再等待 1 秒,然后重新开始
按“运行”,然后按“检查”。
亲手试试
const int buzzerPin = 8;
// 在这里创建音符数组、时长数组和索引变量
void setup() {
}
void loop() {
// 播放一个音符,等待其时长再加 50 ms,然后播放下一个音符
// 播放完最后一个音符后,等待一秒,然后重新开始
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
输出中的所有课
自己练习: Arduino 在线编辑器