2016-06-01 3 views
0

私は、0度に配置された3つのマイクの合成ベクトルの方向を示す0から2πの範囲の方向を計算することを試みています。 、および240度のマーク。すべてのマイクが動作していますが、何とか正しい音程の値を得ることができません。誰かが私のコードを見ることができますか?Arduino 3つのマイクロフォンの大きさの合成方向を計算する

void detDirection(){ 

//Mic1 
float x0 =0; 
float y0 =volts[0]; 
//Serial.println(x0); 
// Serial.println(y0); 
//Mic2 
float x1 =volts[1]*cos(120.0/360 * 2*Pi); 
float y1 =volts[1]*sin(120.0/360 * 2*Pi); 
// Serial.println(x1); 
//Serial.println(y1); 
//Mic3 
float x2 =volts[2]*cos(240.0/360 * 2*Pi); 
float y2 = volts[2]*sin(240.0/360 * 2*Pi); 
//Serial.println(x2); 
//Serial.println(y2); 
//Calculate resultant 
float sumX = x0 + x1 + x2; 
float sumY = y0 + y1 + y2; 
//Serial.println(sumX); 
//Serial.println(sumY); 
float resultant = pow(pow(sumX,2)+pow(sumY,2),0.5); 
float degree = atan2(sumY,sumX); 
float fixDegree= 0 ; 
//Fix degree 
if(!isNeg(sumX) && !isNeg(sumY)){ 
    fixDegree = degree; 
} 
else if(isNeg(sumX) && !isNeg(sumY)){ 
    fixDegree = Pi - degree; 
} 
else if(isNeg(sumX) && isNeg(sumY)){ 
    fixDegree = Pi+ degree; 
} 
else if (!isNeg(sumX) && isNeg(sumY)){ 
    fixDegree = 2*Pi - degree; 
} 

String text = ""; 
text.concat(resultant); 
text.concat(" "); 
text.concat(fixDegree); 
text.concat(" "); 
//Serial.println(text); 
} 
+1

マイクがどのように方向付けられているのか、どこにあるのかは明確ではありませんが、なぜ電圧がこの方向のe.tc.c.詳しく教えてください。 – Serge

答えて

1

うーん...私はよく分からないけど...あなたは

//Mic2 
float x1 =volts[1]*cos(120.0/360 * 2*Pi); 
float y1 =volts[1]*sin(120.0/360 * 2*Pi); 

//Mic3 
float x2 =volts[2]*cos(240.0/360 * 2*Pi); 
float y2 = volts[2]*sin(240.0/360 * 2*Pi); 

を書く場合、私はMIC1のそれはあなたの意図(x0y0)と仮定は

//Mic1 
float x0 =volts[0]*cos(0.0/360 * 2*Pi); 
float y0 =volts[0]*sin(0.0/360 * 2*Pi); 
//Mic1 
float x0 =volts[0]*cos(0.0); 
float y0 =volts[0]*sin(0.0); 

と、cos(0.0)は1つのANS sin(0.0)であることを思い出しては0、

//Mic1 
float x0 =volts[0]; 
float y0 =0.0; 

あるしかし、あなたのコードの中で私はあなたが切り替えた疑いがある、簡単に言えば

//Mic1 
float x0 =0; 
float y0 =volts[0]; 

を参照してくださいですとy0

p.s .:申し訳ありませんが、私の悪い英語です。

関連する問題