以前、『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]; } } }