根据你当前的定义,提供两组方法:
1.设定一个阈值,读取ADC的值,根据阈值划分高低电平(最好就是做一组滑动平均或者低通滤波,这样可以有效去抖,避免过于复杂的逻辑判断),然后设计一组延时判断逻辑,分析“按键按下事件”、“按键按住事件”、“按键弹起事件”的转换条件和时间点,以“弹起事件”为结束,判断弹起时间来判断长按弹起和短按弹起;
2.说点复杂点的,利用STM32的各种功能组合,ADC设定为TIM触发,并设定ADC转换完成事件触发DMA传输,DMA设定传输完成中断,即每Ta时间自动触发一次ADC转换并传输到DMA,每A次DMA传输触发一次DMA中断,当DMA中断到来时,已经有A次每Ta时间采集的ADC数据,在DMA中断内设计一组状态判断(同1),这样就相当于后台拥有了一个按键判断逻辑,main里面每次只需要判断DMA中断中处理的按键状态全局变量进行相应的动作,有助于识别“按键按住”这个动作。
|