您的位置:首页 > 游戏 > 游戏 > javascript用什么软件编写_android studio下载安装_百度app最新版本_网上哪里可以免费打广告

javascript用什么软件编写_android studio下载安装_百度app最新版本_网上哪里可以免费打广告

2025/4/30 20:54:39 来源:https://blog.csdn.net/m0_74211379/article/details/146190548  浏览:    关键词:javascript用什么软件编写_android studio下载安装_百度app最新版本_网上哪里可以免费打广告
javascript用什么软件编写_android studio下载安装_百度app最新版本_网上哪里可以免费打广告

前言

本人玩车的时候要用到陀螺仪

MPU6050容易卡死,然后还很漂,还是太难用了

68块钱的陀螺仪在上位机上的效果挺满意,于是打算用串口用到自己的模型上

本文教大家如何编写串口程序,通过串口获取角度

大家把本文的原理学会后,再去获取其他,比如角加速度,角速度都没问题了

 

官方参考文档

WT61C-TTL/232产品资料 (yuque.com)

 

在官方文档中找到那篇通信协议的文档

在这个页面中我们可以获取的信息有

帧头都是0x55

根据第二帧来决定后面输入进来的是什么数据

 

串口助手查看数据

可以看到模块会把所有数据都传出来

所以我们只需要根据两个头帧,以及后面需要的数据长度来定义接受长度,最后再转化即可

 

 

STM32cubemx配置

我打算用串口1中断的方式来接收

然后OLED在屏幕中显示

OLED如何导入HAL库看我上一期文章

 

定义参数

uint8_t buffer[1];
float xyz[3];

定义两个全局变量

xyz主要用来传输角度,用作全局变量,到时候要传到主函数

buffer[1]主要是用来串口接收一个字符

 

然后在main.c里面也定义成全局变量

extern float xyz[3];

 

 

开启串口中断接收

HAL_UART_Receive_IT(&huart1, (uint8_t *)buffer, 1); 

喜欢在初始化完后加,不加的话不会开启中断

因为加了之后是告诉程序

你要开始接受一个字符了,然后要把接受的存到buffer里面

 

串口中断回调函数编写(重点!)


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
{static uint8_t i = 0;static int16_t buff[8]; if(huart->Instance == USART1){buff[i++] = buffer[0];if((i == 1) && (buff[0] != 0x55)){i = 0;}if((i == 2) && (buff[1] != 0x53)){i = 0;}if(i == 8){int16_t value_x = (buff[3] << 8) | buff[2];int16_t value_y = (buff[5] << 8) | buff[4];int16_t value_z = (buff[7] << 8) | buff[6];xyz[0] = (float)value_x / 32768* 180 ;xyz[1] = (float)value_y/ 32768* 180;xyz[2] = (float)value_z / 32768* 180;for(int j = 0; j < 8; j++){buff[j] = 0;}i = 0;}HAL_UART_Receive_IT(&huart1, (uint8_t *)buffer, 1);}
}

 

首先让第一个字符接收,接收完i就等于1了

判断buff[0]是不是接收到0x55头帧了

如果没有接收到那么i等于0从新开始接收

 

因为我们要获取的是角度,所以第二帧是0x53

第二帧是数据类型判断帧

如果不是0x53,也就代表后面的高八位和第八位都不是我们要的角度数据

所以就重置

 

然后我们确定接下来的数据无误后,分别获取后面的六位数据

根据这张表格

所以我们只需要获取到YawH后就可以计算了

 

16位数据是大小为65536,但是如果是有符号,那么就会/2,-32767到32768之间,然后除于32768再乘180度就可以获取角度了

 

获取完后重新归零数据

 

主函数显示

   sprintf(out,"%.1f  ",xyz[0]);OLED_ShowString(1, 1, out);sprintf(out,"%.1f   ",xyz[1]);OLED_ShowString(2, 1, out);sprintf(out,"%.1f    ",xyz[2]);OLED_ShowString(3, 1, out);HAL_Delay(200);

基本OLED显示了

 

效果展示        

0度到90度的变化

 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com