2つの配列からメロディーを作る
CoddyのArduinoジャーニー「出力」セクションの一部。レッスン 14/24。
曲の音符はすべて同じ長さではありません。2つ目の配列に音符と対応する長さを格納できます。notes[i]とdurations[i]は対になっています。
int notes[] = {262, 262, 392, 392, 440, 440, 392};
int durations[] = {400, 400, 400, 400, 400, 400, 800};同じ音符が続くと、1つの長い音符のように聞こえてしまいます。それぞれの音符の後に短い無音を入れると区切りがはっきりするので、音符をその長さだけ鳴らし、さらに少し待ちます。
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秒待って、もう一度始めます
Runを押してから、Checkを押します。
自分で試してみよう
const int buzzerPin = 8;
// ここで音と長さの配列、およびインデックスを作成する
void setup() {
}
void loop() {
// 音を1つ鳴らし、その長さに50 msを加えた時間だけ待って、次の音に進む
// 最後の音の後は1秒待って、最初からやり直す
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
出力のすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド