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 ひいらぎ