IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 通过无线串口ATK-LoRa-01发送陀螺仪MPU6050三种维度信息---数值处理代码分享(小成就^V^) -> 正文阅读

[嵌入式]通过无线串口ATK-LoRa-01发送陀螺仪MPU6050三种维度信息---数值处理代码分享(小成就^V^)

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为pitch
			if(i==1)temp=roll;               //赋temp为roll
			if(i==2)temp=yaw;                //赋temp为yaw
			for(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");    //换行+回车
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:22:24  更:2022-04-06 23:23:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:46:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码