Arduino,计算三个麦克风幅度的合成方向

时间:2016-06-01 21:17:41

标签: c++ c arduino trigonometry

我试图计算θ为0-2π范围的方向,以指示放置在0度,120度和240度标记处的三个麦克风的合成矢量的方向。所有的麦克风都在工作,但不知怎的,我似乎无法获得正确的度数值。有人可以查看我的代码吗?

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 个答案:

答案 0 :(得分: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];

简而言之,我怀疑您已使用x0切换y0

p.s:抱歉我的英语不好。