目录

项目基于FreeRTOS的STM32四轴飞行器-七.遥控器按键

[项目]基于FreeRTOS的STM32四轴飞行器: 七.遥控器按键

一.遥控器按键摇杆功能说明

两个手柄四个ADC。

左侧手柄

前后推为飞控油门,左右推为控制飞机偏航角。

https://i-blog.csdnimg.cn/direct/0b1ba957525545be901e623a60c90125.png

右侧手柄

控制飞机飞行方向,向前飞向后飞。

https://i-blog.csdnimg.cn/direct/8d33983b45394a50a396b9924b1533b3.png

按键:

可以用于控制飞行微调或者定义一键关机一键定高等功能。

https://i-blog.csdnimg.cn/direct/7195a93f8d464e318f2e7911ab6687da.png

二.摇杆和按键的配置

按键原理图:

https://i-blog.csdnimg.cn/direct/50783136b10844168436446e5344d2b6.png

https://i-blog.csdnimg.cn/direct/e6877f50c5be47f9b57de822ce5a03a0.png

观察按键电路配置,按下为低电平所以设置为 上拉输入

https://i-blog.csdnimg.cn/direct/30d11b3dd7ab418dac29d0d0dd517e81.png

摇杆原理图:

左侧手柄上下控制ADC1-1,左右控制ADC1-6。

右侧手柄上下控制ADC1-2,左右控制ADC1-3。

https://i-blog.csdnimg.cn/direct/81d2a207b42a4d69bdae333b0ffe3d60.png

配置:

ADC的时钟不能超过14MHZ,因为超过会导致ADC时钟精度下降结果不准,HAL库强制不让超过。

https://i-blog.csdnimg.cn/direct/cff71232933c4d4b959f2ff139afc558.png

数据对齐方式:

左对齐和右对齐,数据寄存器只有8,16,32位,ADC采集到的数据只有12位,所以可以放在左侧12位或右侧12位,一般右对齐。

https://i-blog.csdnimg.cn/direct/ed3870e3fdcb4c5588d2d8c719c11c71.png

三.按键扫描

摇杆初始化:

先使用ADC校准,再启动ADC转换。

https://i-blog.csdnimg.cn/direct/d11c5b746f524360a278653950ff0d91.png

创建按键枚举类型:

https://i-blog.csdnimg.cn/direct/f4ff016b879c4415a826394affa085ab.png

定义读取按键:

https://i-blog.csdnimg.cn/direct/5e9af7a885414367bae0484b101fd60c.png

扫描按键:

这时按键为短按的情况。

https://i-blog.csdnimg.cn/direct/9edf22e4f84a4bb08e11f152d9a8b870.png

处理长按逻辑:

处理手柄左上角和右上角的按键长按逻辑,定义time变量记录时间,while判断按键按下且time<12增加time数值,在按键松开或者time>12跳出while,继续执行下面的判断time<=5就是短按,否则为长按,继续使用while判断按键是否松开,最后返回枚举长按值。

https://i-blog.csdnimg.cn/direct/0eb12a228c67479888843d312cde7a17.png

在将该处while注释后,长按逻辑会有问题,因为在最后松开长按时可能time<=5, 发生误识别

https://i-blog.csdnimg.cn/direct/2fd0ed13e55a46dc8c0dd545fd7d2905.png

创建按键扫描任务:

https://i-blog.csdnimg.cn/direct/7c0594028dc5488492e363cb0f5a0b06.png

https://i-blog.csdnimg.cn/direct/9f67eb9a7dc644edaad288c32749e52d.png

查看串口数据打印正常:

https://i-blog.csdnimg.cn/direct/c76ce2aa49884e31b658b060e50dfe16.png