Menu
CoddyTech

用两个数组演奏旋律

本课属于 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 则是播放下一个音符前的间隔。

当索引超过最后一个音符时,旋律就结束了:重新开始播放前,先等待片刻,这样旋律就不会和自身重叠。

challenge icon

挑战

中等

在引脚 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,然后播放下一个音符
  // 播放完最后一个音符后,等待一秒,然后重新开始
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

输出中的所有课

自己练习: Arduino 在线编辑器