pref: 改进按键体验

This commit is contained in:
bmy
2024-02-10 16:19:51 +08:00
parent 27c50ceea8
commit 85fe5a27df
4 changed files with 61 additions and 39 deletions

View File

@@ -51,3 +51,13 @@ void by_buzzer_add(uint16_t tone)
{ {
queue_add_element(tone); queue_add_element(tone);
} }
void by_buzzer_run(void)
{
if (queue_long != 0) {
pwm_init(BUZZER_PIN, a[0], 5000);
queue_pop_element();
system_delay_ms(100);
pwm_set_duty(BUZZER_PIN, 0);
}
}

View File

@@ -20,4 +20,5 @@ extern void queue_pop_element(void);
extern void queue_pop_read(void); extern void queue_pop_read(void);
extern void by_buzzer_init(void); extern void by_buzzer_init(void);
extern void by_buzzer_add(uint16_t tone); extern void by_buzzer_add(uint16_t tone);
extern void by_buzzer_run(void);
#endif #endif

View File

@@ -202,61 +202,73 @@ void EXTI9_5_IRQHandler(void)
void EXTI15_10_IRQHandler(void) void EXTI15_10_IRQHandler(void)
{ {
if (SET == EXTI_GetITStatus(EXTI_Line10)) { if (SET == EXTI_GetITStatus(EXTI_Line10)) {
system_delay_ms(10); if (button_event == button_event_none) {
if (RESET == gpio_get_level(BUTTON_LEFT_PIN)) { system_delay_ms(10);
button_event = button_event_left; if (RESET == gpio_get_level(BUTTON_LEFT_PIN)) {
button_event = button_event_left;
}
by_buzzer_add(1250);
} }
by_buzzer_add(1250);
EXTI_ClearITPendingBit(EXTI_Line10); EXTI_ClearITPendingBit(EXTI_Line10);
} }
if (SET == EXTI_GetITStatus(EXTI_Line11)) { if (SET == EXTI_GetITStatus(EXTI_Line11)) {
system_delay_ms(10); if (button_event == button_event_none) {
if (RESET == gpio_get_level(BUTTON_DOWN_PIN)) { system_delay_ms(10);
button_event = button_event_down; if (RESET == gpio_get_level(BUTTON_DOWN_PIN)) {
button_event = button_event_down;
}
by_buzzer_add(1250);
} }
by_buzzer_add(1250);
EXTI_ClearITPendingBit(EXTI_Line11); EXTI_ClearITPendingBit(EXTI_Line11);
} }
if (SET == EXTI_GetITStatus(EXTI_Line12)) { if (SET == EXTI_GetITStatus(EXTI_Line12)) {
system_delay_ms(10); if (button_event == button_event_none) {
if (RESET == gpio_get_level(BUTTON_UP_PIN)) { system_delay_ms(10);
button_event = button_event_up; if (RESET == gpio_get_level(BUTTON_UP_PIN)) {
button_event = button_event_up;
}
by_buzzer_add(1250);
} }
by_buzzer_add(1250);
EXTI_ClearITPendingBit(EXTI_Line12); EXTI_ClearITPendingBit(EXTI_Line12);
} }
if (SET == EXTI_GetITStatus(EXTI_Line13)) { if (SET == EXTI_GetITStatus(EXTI_Line13)) {
static uint64_t time_via = 0; if (button_event == button_event_none) {
system_delay_ms(10); static uint64_t time_via = 0;
if (RESET == gpio_get_level(BUTTON_CENTER_PIN)) { system_delay_ms(10);
time_via = system_get_tick(); if (RESET == gpio_get_level(BUTTON_CENTER_PIN)) {
} else if (SET == gpio_get_level(BUTTON_CENTER_PIN)) { time_via = system_get_tick();
time_via = system_get_tick() - time_via; } else if (SET == gpio_get_level(BUTTON_CENTER_PIN)) {
if (time_via > LONG_PRESS_THRESHOLD_TICK) { time_via = system_get_tick() - time_via;
button_event = button_event_center_lp; if (time_via > LONG_PRESS_THRESHOLD_TICK) {
by_buzzer_add(2000); button_event = button_event_center_lp;
} else { by_buzzer_add(2000);
button_event = button_event_center_sp; } else {
by_buzzer_add(1800); button_event = button_event_center_sp;
by_buzzer_add(1800);
}
time_via = 0;
} }
time_via = 0;
} }
EXTI_ClearITPendingBit(EXTI_Line13); EXTI_ClearITPendingBit(EXTI_Line13);
} }
if (SET == EXTI_GetITStatus(EXTI_Line14)) { if (SET == EXTI_GetITStatus(EXTI_Line14)) {
system_delay_ms(10); if (button_event == button_event_none) {
if (RESET == gpio_get_level(BUTTON_RIGHT_PIN)) { system_delay_ms(10);
button_event = button_event_right; if (RESET == gpio_get_level(BUTTON_RIGHT_PIN)) {
by_buzzer_add(1250); button_event = button_event_right;
by_buzzer_add(1250);
}
} }
EXTI_ClearITPendingBit(EXTI_Line14); EXTI_ClearITPendingBit(EXTI_Line14);
} }
if (SET == EXTI_GetITStatus(EXTI_Line15)) { if (SET == EXTI_GetITStatus(EXTI_Line15)) {
system_delay_ms(10); if (button_event == button_event_none) {
if (RESET == gpio_get_level(BUTTON_SIDE_PIN)) { system_delay_ms(10);
button_event = button_event_side; if (RESET == gpio_get_level(BUTTON_SIDE_PIN)) {
by_buzzer_add(2000); button_event = button_event_side;
by_buzzer_add(1500); by_buzzer_add(2000);
by_buzzer_add(1500);
}
} }
EXTI_ClearITPendingBit(EXTI_Line15); EXTI_ClearITPendingBit(EXTI_Line15);
} }

View File

@@ -36,23 +36,22 @@ int main(void)
debug_init(); debug_init();
// mt9v03x_init(); // mt9v03x_init();
ips200_init(IPS200_TYPE_SPI); ips200_init(IPS200_TYPE_SPI);
usb_cdc_init();
by_led_init(); by_led_init();
by_buzzer_init(); by_buzzer_init();
by_button_init(); by_button_init();
jj_bt_init(); // jj_bt_init();
// jj_param_eeprom_init(); // jj_param_eeprom_init();
Page_Init(); Page_Init();
pit_ms_init(TIM6_PIT, 2); // pit_ms_init(TIM6_PIT, 2);
pit_ms_init(TIM1_PIT, 2); // pit_ms_init(TIM1_PIT, 2);
while (1) { while (1) {
Page_Run(); Page_Run();
queue_pop_read(); by_buzzer_run();
if (mt9v03x_finish_flag) { if (mt9v03x_finish_flag) {
// 该操作消耗大概 1970 个 tick折合约 110us // 该操作消耗大概 1970 个 tick折合约 110us
memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t)));