新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2021-2-1
- 在线时间
- 6 小时
|
1金钱
这是串口打出来的信息,提示通信超时但是还是有数据发出来。在野火的例程改的,就只是把读取的数据进行了简单的处理,就报错了,不知道是硬件I2c的原因还是什么情况,请大佬解答一下
if (MPU6050ReadID() == 1)
{
//加速度校准程序
for(r=0;r<1024;r++)
{
MPU6050ReadAcc(Acel);
Ax=Acel[0];
Ax_sum=Ax_sum+Ax;
time_dely(1);
}
// basedataInt_part=Ax/1024;
// basedataRem_part=Ax%1024;
Base_data=(float)Ax_sum/1024.0;
while(1)
{
if(Task_Delay[1]==0)
{
// predata=0;
// lastdata=0;
Max=0;
Min=0;
for(i=0;i<64;i++)
{
// printf("%d",i);
MPU6050ReadAcc(Acel);
// printf("\r\n%d\r\n",Acel[0]);
data[i]=Acel[0];
lastdata=predata;
predata=data[i];
// Max=data[0];
// Min=data[0];
if(Max<predata)
{
Max=predata;
}
if(Min>predata)
{
Min=predata;
}
// printf("\r\n%d,%d,%d\r\n",predata,lastdata,predata*lastdata);
if(oppositeSigns(predata,lastdata))
{
Num=i+1;
// printf("\r\n%d\r\n",Num);
break;
}
}
adjust_Max=((float)Max-Base_data)/1638.4;
if(data[0]>0)
{
// if(adjust_Max<0.009)
// {
// adjust_Max=0;
// }
v=0.5*adjust_Max*(float)Num;
printf("\r\v%f\r\n",v);
}
else
{
// if(adjust_Min>-0.009)
// {
// adjust_Min=0;
// }
adjust_Min=((float)Min-Base_data)/1638.4;
v=0.5*adjust_Min*(float)Num;
printf("\r\n%f\r\n",v);
}
Task_Delay[1]=600;//更新一次数据,可根据自己的需求,提高采样频率,如100ms采样一次
}
|
|