NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(tone関数の使い方)

■tone関数
 tone関数は、ピンに指定された周波数(50%のデューティ・サイクル)の方形波を生成します。継続時間を指定することもできます。そうでなければ、waveはnoTone関数を呼び出すまで続きます。出力ピンにピエゾブザーまたは他のスピーカーを接続する事で音を鳴らす事が出来ます。一度に生成できるトーンは1つだけです。トーンが既に別のピンで再生されている場合、tone関数の呼び出しは無効です。トーンが同じピンで再生されている場合は、その周波数が設定されます。

表1:ボード別最少・最大周波数
 ボード 最小周波数(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
図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出力が妨げられます。
 

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る