买了一个十轴的模块,应该如何使用才能读取数据

2019-07-20 01:02发布


复制代码

IIC时序模拟参考了原子的例程,仅作修改引脚,这方面应该没多大问题,就不贴代码了

  1. void ShortToChar(short sData,unsigned char cData[])
  2. {
  3.         cData[0]=sData&0xff;
  4.         cData[1]=sData>>8;
  5. }
  6. short CharToShort(unsigned char cData[])
  7. {
  8.         return ((short)cData[1]<<8)|cData[0];
  9. }

  10.   
  11. int main(void)
  12. {
  13.         unsigned char chrTemp[30];
  14.         unsigned char str[100];
  15.         float a[3],w[3],h[3],Angle[3];
  16.        
  17.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  18.         delay_init(168);  //初始化延时函数
  19.         uart_init(115200);                //初始化串口波特率为500000
  20.        
  21.         LCD_Init();                                        //LCD初始化
  22.         JY901b_Init();
  23.        
  24.         POINT_COLOR=RED;//设置字体为红 {MOD}
  25.        

  26.         while(1)
  27.         {
  28.                 delay_ms(100);
  29.                
  30.                 IICreadBytes(0x50, AX, 24,&chrTemp[0]);
  31.                
  32.                 a[0] = (float)CharToShort(&chrTemp[0])/32768*16;
  33.                 a[1] = (float)CharToShort(&chrTemp[2])/32768*16;
  34.                 a[2] = (float)CharToShort(&chrTemp[4])/32768*16;
  35.                
  36.                 w[0] = (float)CharToShort(&chrTemp[6])/32768*2000;
  37.                 w[1] = (float)CharToShort(&chrTemp[8])/32768*2000;
  38.                 w[2] = (float)CharToShort(&chrTemp[10])/32768*2000;
  39.                
  40.                 h[0] = CharToShort(&chrTemp[12]);
  41.                 h[1] = CharToShort(&chrTemp[14]);
  42.                 h[2] = CharToShort(&chrTemp[16]);
  43.                
  44.                 Angle[0] = (float)CharToShort(&chrTemp[18])/32768*180;
  45.                 Angle[1] = (float)CharToShort(&chrTemp[20])/32768*180;
  46.                 Angle[2] = (float)CharToShort(&chrTemp[22])/32768*180;
  47.                
  48.                 sprintf((char *)str,"0X50:a:%.3f %.3f %.3f ",a[0],a[1],a[2]);
  49.                 LCD_ShowString(30,200,200,16,16,str);
  50.                
  51.                 sprintf((char *)str,"0X50:w:%.3f %.3f %.3f ",w[0],w[1],w[2]);
  52.                 LCD_ShowString(30,220,200,16,16,str);
  53.                
  54.                 sprintf((char *)str,"0X50:h:%.0f %.0f %.0f ",h[0],h[1],h[2]);
  55.                 LCD_ShowString(30,240,200,16,16,str);
  56.                
  57.                 sprintf((char *)str,"0X50:Angle:%.3f %.3f %.3f ",Angle[0],Angle[1],Angle[2]);
  58.                 LCD_ShowString(30,260,200,16,16,str);
  59.                
  60.                
  61.        
  62.         }       
  63.                
  64. }
复制代码主函数参考了厂家例程,我在此基础上添加了LCD显示
0X50是模块地址,AX指向X轴加速度寄存器地址
最后在探索者开发板上显示的数据全部是000000000
我觉得思路应该是对的,请大神帮忙看看是哪里出了差错,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 06:37
 精彩回答 2  元偷偷看……
woshilaixuexide
2楼-- · 2019-07-20 10:23
正点原子 发表于 2019-6-29 02:51
问问卖家

那个售后客服像机器人一样,只会让我参考例程
正点原子
3楼-- · 2019-07-20 13:02
 精彩回答 2  元偷偷看……
woshilaixuexide
4楼-- · 2019-07-20 16:44
 精彩回答 2  元偷偷看……

一周热门 更多>