1.我想创建一个不会中断主回流和长短推状态的按钮阅读结构。那不是为此按下的按钮吗?保存数据集的 BT_User_State 变量,按钮长按,短按?我已经定义了两个单独的 BT_User_Flag_ShortPress 和 BT_User_Flag_LongPress 变量来保存数据,以及一个 BT_User_Time 变量,它将在持续时间内保存。
typedef enum{
Flag_Reset,
Flag_Set
} Button_Flag;
typedef enum{
Button_Released,
Button_Pressed
} Button_State;
Button_State BT_User_State = Button_Released;
Button_Flag BT_User_Flag_ShortPress = Flag_Reset;
Button_Flag BT_User_Flag_LongPress = Flag_Reset;
uint16_t BT_User_Time = 0;
2.每1ms还有一个Timer。完成此操作后,计时器溢出:
if(HAL_GPIO_ReadPin(BT_User_GPIO_Port, BT_User_Pin) == GPIO_PIN_SET)
{
BT_User_State = Button_Pressed;
BT_User_Time++;
}
else
{
if(BT_User_Time >= 750)
{
BT_User_Flag_LongPress = Flag_Set;
}
else if (BT_User_Time >= 50)
{
BT_User_Flag_ShortPress = Flag_Set;
}
BT_User_Time = 0;
BT_User_State = Button_Released;
}
3.如果在剪切发生时按下按钮,我将按钮状态更改为已打印并添加了保存持续时间的变量 1。
如果在剪切发生时未按下按钮,我首先检查保存该值的变量,从较大的值开始并设置必要的标志。我终于重置了保存持续时间的变量并将按钮状态更改为 Dropped。
在主循环中:
if(BT_User_Flag_ShortPress == Flag_Set && BT_User_State == Button_Released)
{
HAL_GPIO_TogglePin(LD_Blue_GPIO_Port, LD_Blue_Pin);
BT_User_Flag_ShortPress = Flag_Reset;
}
if(BT_User_Flag_LongPress == Flag_Set && BT_User_State == Button_Released)
{
HAL_GPIO_TogglePin(LD_Red_GPIO_Port, LD_Red_Pin);
BT_User_Flag_LongPress = Flag_Reset;
}