我目前正在研究使用和arduino,陀螺仪,加速度计和蓝牙芯片的项目来尝试建模一些数据。我目前正在尝试收集数据,打包并通过蓝牙将其发送到手机。问题是我使用的蓝牙芯片是低能耗的,因此它一次只能发送20个字节的消息。我试图通过存储收集的数据一段时间来解决这个问题,然后以20字节的突发发送所有数据。我目前正在测试此方法而不发送数据,只是将数据打印到串行监视器。这就是我的问题出现的地方,当实时打印数据时一切正常但是当我尝试将它存储在一个数组中时,我得到了这个:
593,575,567,0,0,0
592,575,567,0,0,0
592,575,567,0,0,0
592,575,567,0,0,0
592,575,567,0,0,0
593,575,567,0,0,0
586,576,568,0,0,0
0,0,0
0,0
0,0
,0,0,0
0,0,0
正如你所看到的那样,似乎只是打破了。如果有人能帮助我,那就太棒了!
这是相关的代码块
for(int i = 0; i < loopVal; i++)
{
yawGyroValDouble = 0;
pitchGyroValDouble = 0;
rollGyroValDouble = 0;
totalClicksY = 0;
angleY = 0;
totalClicksP = 0;
angleP = 0;
totalClicksR = 0;
angleR = 0;
xRe = 0;
yRe = 0;
zRe = 0;
s = "";
int starttime = millis(); // get start time
int endtime = starttime; // init end time
while ((endtime - starttime) < time)
{
getGyroValues(); // This will update rollGyroVal, pitchGyroVal, and yawGyroVal with new values
yawGyroValDouble =yawGyroVal;
if(abs(yawGyroValDouble) > abs(gyroNoiseThresh)){ // ignore noise
totalClicksY+=yawGyroValDouble; // update runsum
}
pitchGyroValDouble =pitchGyroVal;
if(abs(yawGyroValDouble) > abs(gyroNoiseThresh)){ // ignore noise
totalClicksP+=pitchGyroValDouble; // update runsum
}
rollGyroValDouble =rollGyroVal;
if(abs(yawGyroValDouble) > abs(gyroNoiseThresh)){ // ignore noise
totalClicksR+=rollGyroValDouble; // update runsum
}
xRe = analogRead(pinX);
yRe = analogRead(pinY);
zRe = analogRead(pinZ);
delay (gyroDelayTime);
endtime = millis();
}
angleY = totalClicksY / clicksPerDegCCW;
angleP = totalClicksP / clicksPerDegCCW;
angleR = totalClicksR / clicksPerDegCCW;
String yawSend = String(angleY);
String pitchSend = String(angleP);
String rollSend = String(angleR);
String xSend = String(xRe);
String ySend = String(yRe);
String zSend = String(zRe);
//s = "Accel - X: " + xSend + " Y: " + ySend + " Z: " + zSend + "\n" + "Gyro - Yaw: " + yawSend + " Pitch: " + pitchSend + " Roll: " + rollSend;
s = "" + xSend + "," + ySend + "," + zSend + "," + yawSend + "," + pitchSend + "," + rollSend;
Serial.println(s);
res[i] = s;
}
答案 0 :(得分:0)
您没有显示宣布totalClicksY
,totalClicksP
,totalClicksR
和clicksPerDegCCW
的位置,但我认为它们被声明为整数类型(int或长)。如果是这样,你的数学结果如下:
angleY = totalClicksY / clicksPerDegCCW;
angleP = totalClicksP / clicksPerDegCCW;
angleR = totalClicksR / clicksPerDegCCW;
将是整数。如果这些分区的结果小于1,它们将被截断为0。
尝试将totalClicksY
,totalClicksP
,totalClicksR
和clicksPerDegCCW
声明为double
。那个,或者当你做数学时把它们抛出来,像这样:
angleY = (double)totalClicksY / (double)clicksPerDegCCW;
angleP = (double)totalClicksP / (double)clicksPerDegCCW;
angleR = (double)totalClicksR / (double)clicksPerDegCCW;
(我还假设angleY
,angleP
和angleR
也被声明为双打 - 如果不是,他们肯定应该是。)