1.主机

        将3个数值(有符号整形int)转化为12个字符串(方便接收方处理数据),每四位为一个数值,其中每四位的第一位是符号位,正值时为'0'号,负值时为'-'号,转化为字符串通过无线串口发送。

        具体的是现将12位字符串存入二维数组(A[3][4])中,然后逐个遍历发送。

/*** @brief  MPU6050数据上报* @param  无* @retval 无*/
void DATA_Report(void)
{static u8 i,j;if(mpu6050.flag == 1)                      //采集成功时{    for(i=0;i<3;i++)              //对发送数据(三种不同方向的角度)进行处理,以12位的字符串发送过去{if(i==0)temp=pitch;                            //赋temp为pitchif(i==1)temp=roll;               //赋temp为rollif(i==2)temp=yaw;                //赋temp为yawfor(j=0;j<4;j++){if(temp<0)                     //判断所赋值的正负,以便于给字符串中间添加'-'号{temp=-temp;                  //取反方便求余switch(j){case 0:A[i][0]='-';break;  //给每一个数值转化为字符串的第一位加一个'-'的字符case 1:A[i][1]=temp%1000/100;break;  //每一个数值的百位转换为字符case 2:A[i][2]=temp%100/10;break;    //每一个数值的十位转换为字符 case 3:A[i][3]=temp%10;break;        //每一个数值的个位转换为字符default:break;}}else                           //如果为正值直接转换{switch(j){case 0:A[i][0]=temp%10000/1000;break;//每一个数值的千位转换为字符case 1:A[i][1]=temp%1000/100;break;  //每一个数值的百位转换为字符case 2:A[i][2]=temp%100/10;break;    //每一个数值的十位转换为字符case 3:A[i][3]=temp%10;break;        //每一个数值的个位转换为字符default:break;}}}}for(i=0;i<3;i++)                             //通过遍历二维数组将12个字符串通过无线串口发送过去{for(j=0;j<4;j++){if(A[i][j]=='-')                         //判断如果是'-'号,单独发送,因为不能通过%d发送{u3_printf("-");}else{u3_printf("%d",A[i][j]);               //若不是'-'号,直接通过%d发送   ///**注意**/:char类型既可以表示字符,又可以同时表示整形数字,所以可以通过%d直接打印发送}}}
//      u3_printf("\r\n");//      printf("gyrox:%d,gyroy:%d,gyroz:%d,aacx:%d,aacy:%d,aacz:%d\r\n",gyrox,gyroy,gyroz,aacx,aacy,aacz);//上报角速度数据,角加速度数据LED1=!LED1;                                         //LED闪烁mpu6050.flag = 0;                                   //采集成功标志位设置为无效}else ;                                                       //防卡死
}

2.从机数据处理

(1)对LoRa.c的处理

        现将从发送方得到的数据(12位字符串)存储在一维数组A[]中,方便后续数据处理。

//Lora模块接收数据
void LoRa_ReceData(void)
{u16 i=0;u16 len=0;if(USART3_RX_STA&0x8000){len = USART3_RX_STA&0X7FFF;USART3_RX_BUF[len]=0;//添加结束符USART3_RX_STA=0;for(i=0;i<len;i++){while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕A[i]=USART3_RX_BUF[i];                     //将接收到的字符串一个一个的存入一维数组A[]中
//          USART_SendData(USART1,USART3_RX_BUF[i]); //通过串口3接收到的数据发送至串口1,USART3_RX_BUF[i]为数据}}
}

(2)接收方数据处理函数

      将12位串在转换为3位有符号整形的数字,存储在数组B[]中,方便对数值做出判断。

        补充:C语言中strlen(A)是求数组A到\0(结束符)的字符长度,不包括\0.

/*************************
*数据处理
*将接收到的12个字符串(带'-'号的)转化为三个数字
*B[3]:用来存储三个数值
*A[]:用来存储12个字符
**************************/
void Data(void)
{static u8 i,j;for(i=0;i<strlen(A);i++){if(i>=0&&i<4)           //判断前4个字符为一个数字{j=i;                  //做一个10000整除时的标志位if(i==0&&A[i]=='-')   //判断第0位的字符数是否为'-'号{E=-1;               //若为'-'则设置一个标志位E}else                  //若第一位不为'-',说明该4位组成的一个数字为正数{B[0]=B[0]+(A[i]-48)*(10000/(pow(10,j+1)));//将每一位乘以对应的10的几次方相加起来得到该数值}}if(i>=4&&i<8)           //判断中间4个字符为一个数字{j=i-4;if(i==4&&A[i]=='-'){F=-1;}else{B[1]=B[1]+(A[i]-48)*(10000/(pow(10,j+1)));}}if(i>=8&&i<12)          //判断最后4个字符为一个数字{j=i-8;if(i==8&&A[i]=='-'){G=-1;}else{B[2]=B[2]+(A[i]-48)*(10000/(pow(10,j+1)));}}}/*对正负做判断如果为负在原有的基础上乘-1*/if(E==-1)          //判断第一个值的正负{B[0]=B[0]*(-1);  //在原有的基础上乘-1转换为负值E=0;             //对标志位清零}if(F==-1)          //判断第二个值的正负{B[1]=B[1]*(-1);F=0;             //对标志为清零}if(G==-1)          //判断第三个值的正负{B[2]=B[2]*(-1);G=0;             //对标志为清零}for(i=0;i<3;i++)   //将这三个数值打印出来{printf("%d  ",B[i]);B[i]=0;          //对数组清零,方便下一次赋值}printf("\r\n");    //换行+回车
}

最新文章

  1. java plc通讯_树莓派+西门子PLC+Aliyun
  2. 开发中经常碰到的问题cookie和session问题,今天一并解决
  3. 哒螨灵使用注意事项_杀螨最优组合,老的、少的、没出生的,都管用
  4. IE、FF的基本注意事项
  5. 邮件发送---在.net2003和2005中
  6. gcc编译c文件 python.h 未找到
  7. 学习《html5.css3.0》网页布局和样式精粹(第一天)
  8. tensorflow-object-detection
  9. I00020 计算卡特兰数函数
  10. 数据库实验2:数据库的建立与维护
  11. Java 核心系列教程
  12. 既然有http 请求,为什么还要用rpc调用?
  13. IntelliJ IDEA2017.3 破解
  14. 子网划分,掩码转换计算
  15. gtx 750 linux驱动下载,Ubuntu 12.04安装NVIDIA GTX750显卡驱动
  16. 2013中国企业500强榜单出炉
  17. python抢mac微信红包群_要抢红包?Python来帮你~
  18. 4G时代 运营商的经营模式变化
  19. 图形渲染与UWA论坛,mipi官网
  20. Dmoz对Google的PageRank影响(转)

热门文章

  1. 灰度图腐蚀膨胀原理介绍的很清晰。
  2. alpha因子常见问题_多因子模型是否真的可以带来阿尔法(alpha)?
  3. Educoder -Java面向对象-Java语言之数组(第1关:数组的遍历:给小朋友分糖果)
  4. 吐泡泡_via牛客网
  5. 我的大学(学习-上)
  6. 55 - 字符流中第一个不反复的字符
  7. 数据库三个级别封锁协议
  8. 2022.2.20自制豆腐
  9. 门头沟的《一出好戏》
  10. Android 蓝牙自动打开并扫描设备,以及获取对方蓝牙设备的种类