【Processing+Arduino】加速度センサを傾けると音が鳴る。
加速度センサを傾けるとProcessing側で音が鳴ります。
傾けると何回も音が鳴っているので、改良しなければなりません....
Arduino側プログラム
//******************************** //加速度センサの値を取得するプログラム //******************************** void setup() { // シリアルモニターの初期化をする Serial.begin(9600) ; } void loop() { int i ; long x,y,z; //50回センサ値を読み込んで平均を算出 x=y=z=0; for (i=0 ; i < 50 ; i++) { x = x + analogRead(A0) ; // X軸 y = y + analogRead(A1) ; // Y軸 z = z + analogRead(A2) ; // Z軸 } x = x / 50 ; y = y / 50 ; z = z / 50 ; //int rotateX = (x-194)/0.72 - 90; //角度を求める式 int rotateX = (x-194)/0.72; //角度を求める式 //Serial.print(rotateX) ; //Serial.print(" ") ; //int rotateY = (y-338)/0.76 - 90; //Serial.print(rotateY) ; //Serial.println() ; Serial.write('H'); // ヘッダの送信 Serial.write(highByte(rotateX)); // 上位バイトの送信 Serial.write(lowByte(rotateX)); // 下位バイトの送信 delay(50) ; }
※ProcessingのソースコードのPdeファイルの場所にwavファイルを
格納してください。
・wavファイルはこちら(sound_file)のファイルの中身です!
Processing側プログラム
import ddf.minim.*; import processing.serial.*; Minim minim; AudioSample roller; AudioSample foot; Serial serial; void setup() { serial = new Serial( this, Serial.list()[0], 9600 ); minim = new Minim(this); roller = minim.loadSample("roller.wav", 2048); foot = minim.loadSample("foot.wav", 2048); } void draw() { } void serialEvent(Serial port) { if ( port.available() >= 3 ) { // ヘッダ + 上位バイト + 下位バイト で合計3バイト if ( port.read() == 'H' ) { // ヘッダ文字を見つけたところから読み取る int high = port.read(); // 上位バイト読み込み int low = port.read(); // 下位バイト読み込み int recv_data = high*256 + low; // 上位・下位を合体させる println(recv_data); // 結果の表示 if(recv_data> 100){roller.trigger();} if(recv_data< 80){foot.trigger();} } } } //void keyPressed() { // if (key == 'k') roller.trigger(); // if (key == 's') foot.trigger(); //} void stop() { roller.close(); foot.close(); minim.stop(); super.stop(); }
【補足】Processingソースコード改良しました。
※傾けると1回WAVファイルが再生されます。
もう一度、水平にして傾けるとまたWAVファイルが再生されます。
import ddf.minim.*; import processing.serial.*; Minim minim; AudioSample roller; AudioSample foot; Serial serial; int Flag = 0; int Flag2 = 0; void setup() { serial = new Serial( this, Serial.list()[0], 9600 ); minim = new Minim(this); roller = minim.loadSample("roller.wav", 2048); foot = minim.loadSample("foot.wav", 2048); } void draw() { } void serialEvent(Serial port) { if ( port.available() >= 3 ) { // ヘッダ + 上位バイト + 下位バイト で合計3バイト if ( port.read() == 'H' ) { // ヘッダ文字を見つけたところから読み取る int high = port.read(); // 上位バイト読み込み int low = port.read(); // 下位バイト読み込み int recv_data = high*256 + low; // 上位・下位を合体させる println(recv_data); // 結果の表示 if(recv_data> 100){ if(Flag == 0){Flag = 1;} if(Flag == 1){roller.trigger(); Flag = 2;} } if(recv_data< 80){ if(Flag == 0){Flag = 1;} if(Flag == 1){foot.trigger(); Flag = 2;} } if(recv_data >= 80 && recv_data <= 100){ Flag = 0; } } } } //void keyPressed() { // if (key == 'k') roller.trigger(); // if (key == 's') foot.trigger(); //} void stop() { roller.close(); foot.close(); minim.stop(); super.stop(); }