tone()
関数は、Arduino IDE で音を生成するために使用される関数です。ブザーやスピーカーを使って特定の周波数の音を出すことができます。tone()
関数を使用すると、任意のデジタルピンで特定の周波数の音を生成できます。例えば、アラーム、メロディ、効果音などの用途に使えます。
tone()
関数の基本的な使い方
void tone(uint8_t pin, unsigned int frequency);
void tone(uint8_t pin, unsigned int frequency, unsigned long duration);
パラメータの説明
pin
: 音を出力するデジタルピン番号です。Arduinoのデジタルピン(例: 3, 5, 9 など)を指定します。frequency
: 音の周波数をHz単位で指定します。人間の耳に聞こえる範囲はおおよそ 20Hz~20kHz です。例えば、440Hzは「ラ」の音に相当します。duration
(任意): 音を出す時間をミリ秒単位で指定します。このパラメータを指定しない場合は、音は無期限に鳴り続けます。
例1: 単純な音を鳴らす
void setup() {
// デジタルピン8で440Hzの音を鳴らす
tone(8, 440);
}
void loop() {
// 空のループ
}
このコードでは、デジタルピン8で440Hzの音(A4、ラの音)が鳴り始めます。tone()
を使用すると、音は無期限に鳴りますが、noTone()
関数を使って音を止めることができます。
例2: 一定時間だけ音を鳴らす
void setup() {
// デジタルピン8で440Hzの音を1000ミリ秒(1秒)鳴らす
tone(8, 440, 1000);
}
void loop() {
// 空のループ
}
このコードでは、440Hzの音が1秒間鳴り、その後自動的に音が止まります。
例3: 複数の音を順番に鳴らす
void setup() {
// デジタルピン8で異なる周波数の音を鳴らす
tone(8, 262, 500); // C4 (ド) の音を0.5秒鳴らす
delay(500); // 0.5秒の休止
tone(8, 294, 500); // D4 (レ) の音を0.5秒鳴らす
delay(500); // 0.5秒の休止
tone(8, 330, 500); // E4 (ミ) の音を0.5秒鳴らす
delay(500); // 0.5秒の休止
}
void loop() {
// 空のループ
}
このコードでは、C4(ド)、D4(レ)、E4(ミ)という音を順番に鳴らし、それぞれ0.5秒の間隔で再生します。
音を止める: noTone()
関数
tone()
で音を鳴らした後に音を止めるには、noTone()
関数を使います。
void setup() {
tone(8, 440); // 440Hzの音を無期限に鳴らす
delay(2000); // 2秒間待機
noTone(8); // 音を止める
}
void loop() {
// 空のループ
}
このコードでは、2秒間440Hzの音が鳴り、その後音が止まります。
tone()
関数の注意点
- PWM(パルス幅変調)ピンに依存しない:
tone()
関数は、Arduino の標準的なデジタルピンで動作しますが、特定の周波数の信号を出力するために、タイマーを使用しています。これは、PWM ピンでなくても音が鳴らせることを意味します。 - タイマーの競合:
tone()
は内部でタイマーを使うため、他のライブラリ(例えばServo
ライブラリ)と同時に使うと競合が発生することがあります。 - 複数の音を同時に鳴らすことはできない:
tone()
は1つのピンで1つの音しか鳴らすことができません。別のピンで別の音を鳴らす場合は、別の手段を考える必要があります。
tone()
を使ったメロディの再生例
以下は、メロディを再生する例です。
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523}; // ドレミファソラシド
int noteDurations[] = {500, 500, 500, 500, 500, 500, 500, 500}; // 各音の長さ
void setup() {
for (int i = 0; i < 8; i++) {
int noteDuration = noteDurations[i];
tone(8, melody[i], noteDuration); // 各音を再生
delay(noteDuration + 100); // 音を鳴らして次に進む
}
}
void loop() {
// 空のループ
}
このコードでは、melody[]
に定義された周波数に基づいて「ドレミファソラシド」の音階を再生します。
まとめ
tone()
関数は、特定の周波数の音を生成し、Arduinoプロジェクトでサウンドを出力するために非常に便利です。シンプルに使える関数ですが、使用するタイマーの競合や複数の音を同時に鳴らせないといった制約もあります。音を生成する多くのプロジェクトで役立つため、ブザーやスピーカーを使って音を鳴らしたい場合に覚えておくと便利です。