我试图计算θ为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);
}
答案 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(x0
和y0
)的意图是
//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:抱歉我的英语不好。