diff --git a/main/app_main.cpp b/main/app_main.cpp index a8ff638..367e1ab 100644 --- a/main/app_main.cpp +++ b/main/app_main.cpp @@ -55,7 +55,7 @@ wifi_state_light_structer_t wifi_state_light_structer = { T_key_structer_t T_key_structer = { .key_before_state = false, .key_now_state = false, - .key_start_press_down_time = 0, + .key_press_down_keep_time = 0, }; /*********************************************************************************************************************** diff --git a/main/key.c b/main/key.c index 6fe659c..d8695fc 100644 --- a/main/key.c +++ b/main/key.c @@ -36,22 +36,40 @@ void T_key_on_event(void) void T_key_schedule(void) { + static uint32_t key_start_press_down_time = 0; T_key_structer_s->key_now_state = T_key_get_level(); /* 检查是否盖上盖 */ if (cover_get_level()) { + /* 上升沿 */ if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == true)) { - short_press_event_cb_s(); - T_key_structer_s->key_start_press_down_time = port_get_ticket(); + if (T_key_structer_s->key_press_down_keep_time != 0) + { + T_key_structer_s->key_press_down_keep_time = 0; + } + key_start_press_down_time = port_get_ticket(); } - if (T_key_structer_s->key_now_state) + /* 下降沿 */ + if ((T_key_structer_s->key_before_state != T_key_structer_s->key_now_state) && (T_key_structer_s->key_now_state == false)) { - if (port_get_ticket() - T_key_structer_s->key_start_press_down_time > key_long_press_time_ms) + T_key_structer_s->key_press_down_keep_time = port_get_ticket() - key_start_press_down_time; + } + + /* 20ms消抖 */ + if ((T_key_structer_s->key_press_down_keep_time > 20) && (key_start_press_down_time != 0)) + { + if (T_key_structer_s->key_press_down_keep_time < 500) + { + short_press_event_cb_s(); + } + else if (T_key_structer_s->key_press_down_keep_time >= 3000) { long_press_event_cb_s(); } + key_start_press_down_time = 0; + T_key_structer_s->key_press_down_keep_time = 0; } } else diff --git a/main/key.h b/main/key.h index 48af8d5..8bbd498 100644 --- a/main/key.h +++ b/main/key.h @@ -7,7 +7,7 @@ typedef struct { bool key_before_state; bool key_now_state; - uint32_t key_start_press_down_time; + uint32_t key_press_down_keep_time; } T_key_structer_t; typedef bool (*key_camera_cb)(void);