マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

3軸加速度センサと圧電スピーカを使ってみる

以前、『3軸加速度センサで傾きによって音の高さが変わる』と書いてるエントリがあったのだが、ソースコードを載っけてなかった。そして、そのときのソースコードを紛失してしまったので書き直した。これは、傾きによって圧電スピーカで鳴らす音を変えるプログラムで、loopの中で傾きを取得し、それに応じた音をforとwhileで鳴らすというもの。圧電スピーカはArduinoの13番を使い、3軸加速度センサはx軸が0番に接続されているものとする。loopの中で変化のない変数を宣言しているが大丈夫か?

void setup(){
  pinMode(13, OUTPUT);
}

void loop(){
  int tones[] = {3830, 3400, 3038, 2864, 2550, 2272, 2028, 1912};
  int tempo = 10000;
  int duration = tempo * 16;
  
  int x = analogRead(0);
  int tx = x / 200;
      
  for(int i = 0; i < 24; i++){
    int elapsedTime = 0;
    
    while(elapsedTime < duration){
      int time = tones[tx] / 2;
  
      digitalWrite(13, HIGH);
      delayMicroseconds(time);
      digitalWrite(13, LOW);
      delayMicroseconds(time);
      
      elapsedTime += tones[tx];
    }
  }
}