2021.7.27 tone関数を使いこなす

Arduinoのプログラム[tone関数を使いこなす]

次に、tone関数を用いてArduinoから音を出していきましょう。

tone関数

tone関数のリファレンスは、

tone(pin, 周波数 , 出力時間);

です。なお、出力時間は、省略して書くこともできます。

さっそく、下記のプログラムを作ってみました。

void setup() {
  // put your setup code here, to run once:
pinMode(11,OUTPUT);
}

void loop() {
int TIME=300;
  // put your main code here, to run repeatedly:
tone(11,262,TIME) ; // ド
delay(TIME) ;
tone(11,294,TIME) ; // レ
delay(TIME) ;
tone(11,330,TIME) ; // ミ
delay(TIME) ;
tone(11,349,TIME) ; // ファ
delay(TIME) ;
tone(11,392,TIME) ; // ソ
delay(TIME) ;
tone(11,440,TIME) ; // ラ
delay(TIME) ;
tone(11,494,TIME) ; // シ
delay(TIME) ;
tone(11,523,TIME) ; // ド
delay(TIME) ;
}

 

このプログラムは、ドレミファソラシドを0.3秒ごとに切り替えて、出力するプログラムです。

使っている関数を、いくつか紹介します。

pinMode(pin, OUTPUT);

Arduinoの各入出力ピンが、出力なのか入力なのかを設定します。例題のプログラムでは11番ピンを出力に設定しているので、pinMode(11,OUTPUT);となります。入力に設定する場合は、pinMode(11,INPUT); また、pinMode(11,INPUT_PULLUP);で、入力をプルアップに設定できます。

 

int 変数=数値;

整数の変数を定義するときにint関数を使います。ほかにもfloat , char,doubleなどがありますが、奥が深いので、いつかまた紹介できたらなと思います。

delay(時間);

プログラムを指定した時間だけ遅延させます。単位はミリ秒です。また、マイクロ秒で指定する場合は、

delayMicroseconds(時間);で指示できます。

 

さて、次に音を鳴らす回路です。回路は、前回のブログでも作成した、スピーカーの回路を使います。

 次に、プログラムの内容は同じですが、配列とfor文を使って、短く簡単にまとめたプログラムです。

だいぶ、短いプログラムになりました。

void setup() {
  // put your setup code here, to run once:
pinMode(11,OUTPUT);
}

void loop() {
  int TIME=300;
  int m[8]={262,294,330,349,392,440,494,523};
  
  // put your main code here, to run repeatedly:

  for(int i=0;i<8;i++){
    tone(11,m[i],TIME) ; 
    delay(TIME) ;
  }
}

このプログラムは、先ほどと同じ、ドレミファソラシドを0.3秒ごとに切り替えて、出力するプログラムです。

使っている関数を、いくつか紹介します。

int 変数[データ数] ={数値1,数値2,数値3,・・・};

配列は、大量の数値を同時に宣言するのに便利です。例のプログラムの場合は、ドレミファソラシドの各音階の周波数をまとめて宣言するため、配列を使い、

int m[8]={262,294,330,349,392,440,494,523};

と表現しました。これを使うとき、例えばレの音の周波数を出したければ、2番目の数値を呼び出すので、0,1 で,

m[1]

が、レの変数になります。呼び出すときの数値は、0からスタートする点に注意しましょう。

 

for(初期値 ; 条件式 ; 加算){    };

for文は波カッコに囲まれたブロックを繰り返し実行します。様々な繰り返し処理に活用でき、データやピンの配列と組み合わせて使われることがあります。

例題のプログラムの場合、

for(int i=0;i<8;i++){

tone(11,m[i],TIME) ;

delay(TIME) ;

}

で、加算させる変数 i の初期値を0にし、これが8以下であるうちは、{}内のプログラムを繰り返し実行します。

実行するプログラムは、tone関数で、iの数値に割り当てられた周波数を出力し、TIME㍉秒待機します。

これを、7回、音階を上げながら実行するため、ドレミファソラシドの順に音が鳴るプログラムになります。

 

本日は、ここまでにします。次回は、超音波センサと組み合わせて、音階を鳴らす楽器作りをします。

 

2021/7/27 ひいらぎ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA