■tone関数
tone関数は、ピンに指定された周波数(50%のデューティ・サイクル)の方形波を生成します。継続時間を指定することもできます。そうでなければ、waveはnoTone関数を呼び出すまで続きます。出力ピンにピエゾブザーまたは他のスピーカーを接続する事で音を鳴らす事が出来ます。一度に生成できるトーンは1つだけです。トーンが既に別のピンで再生されている場合、tone関数の呼び出しは無効です。トーンが同じピンで再生されている場合は、その周波数が設定されます。
ボード | 最小周波数(Hz) | 最大周波数(Hz) |
Uno,Mega,Leonardo and other AVR boards | 31 | 65535 |
Gemma | 実装されていない | 実装されていない |
Zero | 41 | 275000 |
Due | 実装されていない | 実装されていない |
■使用例
ArduinoIDEで使用するtone関数の使い方は以下の通りです。
試しにこのプログラムをArduinoUNOで実行すると、A0~2の入力電圧を読み取り、規定値(threshold=10)以上の電圧であれば8ピンから対応する周波数の音を出力します。
#include "pitches.h" const int threshold = 10; // ノートを生成するセンサの最小読み取り値 // 3つのセンサーに対応する演奏ノート int notes[] = { NOTE_A4, NOTE_B4, NOTE_C3 }; void setup() {} void loop() { for (int thisSensor = 0; thisSensor < 3; thisSensor++) { // センサーを読む int sensorReading = analogRead(thisSensor); // センサーが十分に強く押されていれば以下実行 if (sensorReading > threshold) { // このセンサーに対応するノートを再生する tone(8, notes[thisSensor], 20); } } }
図1:プログラム例
■構文
tone(pin, frequency)
tone(pin, frequency, duration)
■パラメータ
pin:トーンを生成するピン
frequency:ヘルツの音の周波数(詳細は表2参照、unsigned int)
duration:トーンの持続時間(オプション、ミリ秒単位、unsigned long)
表2:ヘルツ音の定数名と周波数一覧
定数名 | 周波数(Hz) | 定数名 | 周波数(Hz) |
NOTE_B2 | 123 | NOTE_GS5 | 831 |
NOTE_C3 | 131 | NOTE_A5 | 880 |
NOTE_CS3 | 139 | NOTE_AS5 | 932 |
NOTE_D3 | 147 | NOTE_B5 | 988 |
NOTE_DS3 | 156 | NOTE_C6 | 1047 |
NOTE_E3 | 165 | NOTE_CS6 | 1109 |
NOTE_F3 | 175 | NOTE_D6 | 1175 |
NOTE_FS3 | 185 | NOTE_DS6 | 1245 |
NOTE_G3 | 196 | NOTE_E6 | 1319 |
NOTE_GS3 | 208 | NOTE_F6 | 1397 |
NOTE_A3 | 220 | NOTE_FS6 | 1480 |
NOTE_AS3 | 233 | NOTE_G6 | 1568 |
NOTE_B3 | 247 | NOTE_GS6 | 1661 |
NOTE_C4 | 262 | NOTE_A6 | 1760 |
NOTE_CS4 | 277 | NOTE_AS6 | 1865 |
NOTE_D4 | 294 | NOTE_B6 | 1976 |
NOTE_DS4 | 311 | NOTE_C7 | 2093 |
NOTE_E4 | 330 | NOTE_CS7 | 2217 |
NOTE_F4 | 349 | NOTE_D7 | 2349 |
NOTE_FS4 | 370 | NOTE_DS7 | 2489 |
NOTE_G4 | 392 | NOTE_E7 | 2637 |
NOTE_GS4 | 415 | NOTE_F7 | 2794 |
NOTE_A4 | 440 | NOTE_FS7 | 2960 |
NOTE_AS4 | 466 | NOTE_G7 | 3136 |
NOTE_B4 | 494 | NOTE_GS7 | 3322 |
NOTE_C5 | 523 | NOTE_A7 | 3520 |
NOTE_CS5 | 554 | NOTE_AS7 | 3729 |
NOTE_D5 | 587 | NOTE_B7 | 3951 |
NOTE_DS5 | 622 | NOTE_C8 | 4186 |
NOTE_E5 | 659 | NOTE_CS8 | 4435 |
NOTE_F5 | 698 | NOTE_D8 | 4699 |
NOTE_FS5 | 740 | NOTE_DS8 | 4978 |
NOTE_G5 | 784 | - | - |
■戻り値
有りません
■補足
複数のピンで異なるピッチを再生したい場合は、次のピンでtone()を呼び出す前に、noTone()を1つのピンで呼び出す必要があります。
tone関数を使用すると、ピン3とピン11(Mega以外のボード)のPWM出力が妨げられます。
励みになりますのでよければクリック下さい(^o^)/