見出し画像

Arduinoの電子工作で遊ぼう! その21 ~光で操作するテルミンを作ってみよう2~

(前回からの続きです)

プログラムを見てみましょう

このプログラムは、照度センサーの値を読み取り、その値に基づいて音の周波数を調整するものです。

int sensorValue;
int sensorLow = 1023;
int sensorHigh = 0;
const int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  while(millis() < 5000){
    sensorValue = analogRead(A0);
    if(sensorValue > sensorHigh){
      sensorHigh = sensorValue;
    }
    if(sensorValue < sensorLow){
      sensorLow = sensorValue;
    }
  }
  
  digitalWrite(ledPin, LOW);
}

void loop() {
  sensorValue = analogRead(A0);
  int pitch = map(sensorValue,sensorLow,sensorHigh,50,4000);
  tone(8,pitch,20);
  delay(100);
}

1.変数の初期化

int sensorValue;
int sensorLow = 1023;
int sensorHigh = 0;
const int ledPin = 13;
  • sensorValue:照度センサーから読み取る値を格納

  • sensorLow と sensorHigh:照度センサーの最低値と最高値を格納

  • ledPin:LEDを接続するピン(13番ピン) ※Arduinoの基板上にあるデジタル端子13番です。

2.setup()関数

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);

  while(millis() < 5000){
    sensorValue = analogRead(A0);
    if(sensorValue > sensorHigh){
      sensorHigh = sensorValue;
    }
    if(sensorValue < sensorLow){
      sensorLow = sensorValue;
    }
  }
  
  digitalWrite(ledPin, LOW);
}
  • ledPinを出力モードに設定し、LEDを点灯させる

  • 5秒間のループで、アナログ入力(A0)からセンサー値を読み取る

  • 読み取った値が最高値より大きければ、sensorHighを更新

  • 読み取った値が最低値より小さければ、sensorLowを更新

  • 5秒経過後、LEDを消灯

プログラムを動かすと5秒間で自動的に最大値と最小値を格納する変数が更新されます。
 最大値を格納:sensorHigh (初期値0)
 最小値を格納:sensorLow  (初期値1023)
この5秒の間、Arduinoの基板上にあるデジタル端子13番のLEDが点灯します。

5秒間のループは、whileでおこなってます。
 while(millis() < 5000){
millis()関数は、Arduinoの電源を入れてから、またはリセットしてからの時間をミリ秒単位で返します。

3.loop()関数

void loop() {
  sensorValue = analogRead(A0);
  int pitch = map(sensorValue,sensorLow,sensorHigh,50,4000);
  tone(8,pitch,20);
  delay(100);
}
  • 再びセンサー値を読み取り、map()関数を使用してセンサー値を50から4000の範囲に変換。この範囲はArduinoが出す音の範囲です。

  • tone()関数で音を鳴らします。引数を3つ指定します。

  1)スピーカーを接続するデジタル入出力端子の番号
     今回は8番
  2)鳴らす音の周波数
     map()関数で求めて変数pitchに格納した値
  3)鳴らす音の長さ
     今回は20ミリ秒

  • delay()関数で100ミリ秒待つようにしています。

動かしてみましょう!

 

何とも言えない不思議な音色です(笑)
みごと成功しました!

いいなと思ったら応援しよう!