项目基于FreeRTOS的STM32四轴飞行器-七.遥控器按键
目录
[项目]基于FreeRTOS的STM32四轴飞行器: 七.遥控器按键
一.遥控器按键摇杆功能说明
两个手柄四个ADC。
左侧手柄 :
前后推为飞控油门,左右推为控制飞机偏航角。
右侧手柄 :
控制飞机飞行方向,向前飞向后飞。
按键:
可以用于控制飞行微调或者定义一键关机一键定高等功能。
二.摇杆和按键的配置
按键原理图:
观察按键电路配置,按下为低电平所以设置为 上拉输入 :
摇杆原理图:
左侧手柄上下控制ADC1-1,左右控制ADC1-6。
右侧手柄上下控制ADC1-2,左右控制ADC1-3。
配置:
ADC的时钟不能超过14MHZ,因为超过会导致ADC时钟精度下降结果不准,HAL库强制不让超过。
数据对齐方式:
左对齐和右对齐,数据寄存器只有8,16,32位,ADC采集到的数据只有12位,所以可以放在左侧12位或右侧12位,一般右对齐。
三.按键扫描
摇杆初始化:
先使用ADC校准,再启动ADC转换。
创建按键枚举类型:
定义读取按键:
扫描按键:
这时按键为短按的情况。
处理长按逻辑:
处理手柄左上角和右上角的按键长按逻辑,定义time变量记录时间,while判断按键按下且time<12增加time数值,在按键松开或者time>12跳出while,继续执行下面的判断time<=5就是短按,否则为长按,继续使用while判断按键是否松开,最后返回枚举长按值。
在将该处while注释后,长按逻辑会有问题,因为在最后松开长按时可能time<=5, 发生误识别 :
创建按键扫描任务:
查看串口数据打印正常: