Я написал код для определения состояния кнопки, который долгое нажатие или нет. Кстати, эта функция вызывает процедуру прерывания таймера в каждые 1 мс.Двойной алгоритм кнопки состояния в C
Если вы нажали более 1 секунды, нажатие активно, короткое нажатие является пассивным. Наоборот.
1- Но кажется, что это действительно фиктивный способ, как я могу сделать его более коротким и более эффективным в соответствии с правилами как для чтения, так и для профессиональных?
BTW Я обновил код, как показано ниже.
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/*button pressed and count*/
if(!HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))
{
usTick++;
}
/*not pressed*/
else
{
if(usTick > 1000){
ButtonState.PressedState = LongPressed;
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
usTick = 0;
}
else if(usTick >350){
ButtonState.PressedState = ShortPressed;
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
usTick = 0;
}
usTick = 0;
}
}
2- Что нужно добавить или изменить, чтобы получить двойное нажатие, нажав информацию в этом обновленном коде?
Возможно, вы захотите переместить это на http://codereview.stackexchange.com/ – mascoj
Возможно, лучше полагаться на прерывания GPIO_PIN_13', а не на прерывания таймера. –
Хорошо, не знал этого. Я переведу его – ree