OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4949|回复: 3

mini板用nrf24l01发送MPU9250欧拉角时,为什么角度不能变化

[复制链接]

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
发表于 2018-6-7 11:23:38 | 显示全部楼层 |阅读模式
1金钱
mini板用nrf24l01发送MPU9250欧拉角时,为什么角度不能变化???新手使用了仿真但是具体还是找不出问题,求解???是程序结构错了嘛?
while(1)
    {
                        
                                                key=KEY_Scan(0);
                                        if(key==KEY0_PRES)
                                        {
                                                //mode=0;
                                                                                                        printf("NRF24L01 RX_Mode\n");
                                                                        //printf("Received DATA:\n");
                                                                        NRF24L01_RX_Mode();                  
                                                                        while(1)
                                                                        {                                                                                   
                                                                                if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.
                                                                                {
                                                                                        //tmp_buf[32]=0;//加入字符串结束符
                                                                                       
                                                                                        if(tmp_buf[0]==0)
                                                                                        {
                                                                                        pitch2=-(tmp_buf[1]*256+tmp_buf[2]);
                                                                                        }else pitch2=tmp_buf[1]*256+tmp_buf[2];
                                                                                       
                                                                                       
                                                                                        if(tmp_buf[3]==0)
                                                                                        {
                                                                                        roll2=-(tmp_buf[4]*256+tmp_buf[5]);
                                                                                        }else roll2=tmp_buf[4]*256+tmp_buf[5];
                                                                                       
                                                                                       
                                                                                        if(tmp_buf[6]==0)
                                                                                        {
                                                                                        yaw2=-(tmp_buf[7]*256+tmp_buf[8]);
                                                                                        }else yaw2=tmp_buf[7]*256+tmp_buf[8];
                                                                                       
                                                                                        printf("Received DATA:\n");
                                                                                        printf("\r\npitch2=%d\r\n",(int)pitch2);
                                                                                        printf("roll2=%d\r\n",(int)roll2);
                                                                                        printf("yaw2=%d\r\n",(int)yaw2);
                                                                                       
                                                                                }else delay_us(100);           
                                                                                t++;
                                                                                if(t==10000)//大约1s钟改变一次状态
                                                                                {
                                                                                        t=0;
                                                                                        LED0=!LED0;
                                                                                }                                    
                                                                        }
                                                
                                        }else if(key==KEY1_PRES)
                                        {
                                                //mode=1;
                                                                                                        printf("NRF24L01 TX_Mode\n");
                                                                        NRF24L01_TX_Mode();
                                                                        while(1)
                                                                        {                                                              
                                                                                if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
                                                                                {
                                                                                       
                                                                                if(mpu_mpl_get_data(&pitch,&roll,&yaw)==0)
                                                                                        {
                                                                                                        MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度传感器数据
                                                                                                        MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺仪数据
                                                                                                 printf("俯仰角Pitch=%d\r\n",(int)(pitch*100));
                                                                                                        printf("\r\n横滚角Roll=%d\r\n",-(int)(roll*100));
                                                                                                 printf("航向角Yaw=%d\r\n\r\n",-(int)(yaw*10));
                                                                                                r=-(int)(roll*100);
                                                                                                p=(int)(pitch*100);
                                                                                                y=-(int)(yaw*10);
                                                                                                delay_ms(50);
                                                                                        }
                                                
                                                                                                 printf("Sended DATA:");
                                                                        
                                                                                                if(p>0)//pitch:俯仰角.单位 0.01度。-9000 - 9000 对应 -90.00 -> 90.00 度
                                                                                                {
                                                                                                tmp_buf[0]=1;
                                                                                                tmp_buf[1]=p/256;
                                                                                                tmp_buf[2]=p%256;        
                                                                                                        pitch2=tmp_buf[1]*256+tmp_buf[2];
                                                                                                        printf("\r\npitch2=%d\r\n",(int)pitch2);
                                                                                                }else {      
                                                                                                                                p=-p;
                                                                                                                                tmp_buf[0]=0;
                                                                                                                                tmp_buf[1]=p/256;
                                                                                                                                tmp_buf[2]=p%256;        
                                                                                                                                pitch2=-(tmp_buf[1]*256+tmp_buf[2]);
                                                                                                                        printf("\r\npitch2=%d\r\n",(int)pitch2);
                                                                                                                        }
                                                                                                        
                                                                                                                        
                                                                                                if(r>0)
                                                                                                {
                                                                                                tmp_buf[3]=1;
                                                                                                tmp_buf[4]=r/256;
                                                                                                tmp_buf[5]=r%256;        
                                                                                                        roll2=tmp_buf[4]*256+tmp_buf[5];
                                                                                                        printf("roll2=%d\r\n",(int)roll2);
                                                                                                }else {   
                                                                                                                                r=-r;
                                                                                                                                tmp_buf[3]=0;
                                                                                                                                tmp_buf[4]=r/256;
                                                                                                                                tmp_buf[5]=r%256;        
                                                                                                                                        roll2=-(tmp_buf[4]*256+tmp_buf[5]);
                                                                                                                         printf("roll2=%d\r\n",(int)roll2);
                                                                                                                        }
                                                                                                
                                                                                                                        
                                                                                                if(y>0)
                                                                                                {
                                                                                                tmp_buf[6]=1;
                                                                                                tmp_buf[7]=y/256;
                                                                                                tmp_buf[8]=y%256;        
                                                                                                yaw2=tmp_buf[7]*256+tmp_buf[8];
                                                                                                 printf("yaw2=%d\r\n",(int)yaw2);
                                                                                                }else {   
                                                                                                                                y=-y;
                                                                                                                                tmp_buf[6]=0;
                                                                                                                                tmp_buf[7]=y/256;
                                                                                                                                tmp_buf[8]=y%256;        
                                                                                                                 yaw2=-(tmp_buf[7]*256+tmp_buf[8]);
                                                                                                                 printf("yaw2=%d\r\n",(int)yaw2);
                                                                                                                        }
                                                                        
                                                                                delay_ms(300);                                    
                                                                                       
                                                                                }else printf("Send Failed\n");               
                                                                                
                                                                                LED0=!LED0;
                                                                                delay_ms(300);                                    
                                                                        }
                        
                                        }
                                        t++;
                                        if(t==100)
                                        {
                                                printf("KEY0:RX_Mode  KEY1:TX_Mode\n");
                                                
                                                        delay_ms(1000);
                                        }
                                                
                                        if(t==200)
                                        {        
                                                
                                                t=0;
                                        }
                                        delay_ms(5);        
                        
                                       
                }

验证2 - 副本 - 副本.zip

5.26 MB, 下载次数: 59

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-6-8 02:03:17 | 显示全部楼层
我们有6050的例程,可以参考下。
回复

使用道具 举报

31

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2018-5-3
在线时间
69 小时
 楼主| 发表于 2018-6-8 09:16:52 | 显示全部楼层
正点原子 发表于 2018-6-8 02:03
我们有6050的例程,可以参考下。

就是对照6050和无线的程序写出来的,放在匿名上位机就没有错误
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-3-3
在线时间
2 小时
发表于 2020-4-18 11:17:15 | 显示全部楼层
好像是这个函数NRF24L01_TxPacket(tmp_buf)==TX_OK没有通过,版主解决了吗,怎么解决的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表