Scientific Journey

私の冒険記録。たまに回り道。

【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();
}