gryo示波器和加速度计输出

时间:2015-02-19 18:53:56

标签: bluetooth arduino accelerometer gyroscope

我目前正在研究使用和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;
  }

1 个答案:

答案 0 :(得分:0)

您没有显示宣布totalClicksYtotalClicksPtotalClicksRclicksPerDegCCW的位置,但我认为它们被声明为整数类型(int或长)。如果是这样,你的数学结果如下:

angleY = totalClicksY / clicksPerDegCCW;
angleP = totalClicksP / clicksPerDegCCW;
angleR = totalClicksR / clicksPerDegCCW;

将是整数。如果这些分区的结果小于1,它们将被截断为0。

尝试将totalClicksYtotalClicksPtotalClicksRclicksPerDegCCW声明为double。那个,或者当你做数学时把它们抛出来,像这样:

angleY = (double)totalClicksY / (double)clicksPerDegCCW;
angleP = (double)totalClicksP / (double)clicksPerDegCCW;
angleR = (double)totalClicksR / (double)clicksPerDegCCW;

(我还假设angleYanglePangleR也被声明为双打 - 如果不是,他们肯定应该是。)