فهرست منبع

Button scan improvement.

Vladimir N. Shilov 6 سال پیش
والد
کامیت
3678d5a43d
2فایلهای تغییر یافته به همراه14 افزوده شده و 9 حذف شده
  1. 4 2
      inc/main.h
  2. 10 7
      src/main.c

+ 4 - 2
inc/main.h

@@ -39,11 +39,13 @@
 #define BUTTONS_STATE      (PINB & BUTTON_PINS)
 #define BUTTON_STATE(pin)  (PINB & pin)
 #define BUTTON_PERIOD      10
-/* все временные константы кнопок кратны периоду опроса кнопок. */
+/* in ms */
+#define BTN_SCAN_PERIOD    10
+#define BTN_TIME_PAUSE     50
+/* все временные константы кнопок кратны периоду опроса кнопок - 10 ms. */
 #define BTN_TIME_PRESSED   5
 #define BTN_TIME_HOLDED    50
 #define BTN_TIME_REPEATED  10
-#define BTN_TIME_PAUSE     5
 
 /* Port C, Lamp digits, output */
 #define DIGIT_BLANK     0x0F

+ 10 - 7
src/main.c

@@ -83,7 +83,7 @@ void main(void) {
 
   showTime();
 
-  RTOS_SetTask(btnProcess, 5, 10);
+  RTOS_SetTask(btnProcess, 5, BTN_SCAN_PERIOD);
 
   /** main loop */
   do {
@@ -180,14 +180,17 @@ static void btnProcess(void) {
         Button[i].time ++;
         if (Button[i].time > BTN_TIME_HOLDED) {
           Button[i].time -= BTN_TIME_REPEATED;
-          ES_PlaceEvent(Button[i].holded); // button pressed auto repeat
+          ES_PlaceEvent(Button[i].pressed); // button pressed auto repeat
         }
       } else {
         // button released
-        if (Button[i].time >= BTN_TIME_PRESSED) {
-          ES_PlaceEvent(Button[i].pressed); // process short press.
+        if (Button[i].time >= (BTN_TIME_HOLDED - BTN_TIME_REPEATED)) {
+          ES_PlaceEvent(Button[i].holded); // process long press
+        } else if (Button[i].time >= BTN_TIME_PRESSED) {
+          ES_PlaceEvent(Button[i].pressed); // process short press
         }
         Button[i].time = 0;
+        RTOS_SetTask(btnProcess, BTN_TIME_PAUSE, BTN_SCAN_PERIOD);
       }
     } /* end (pin == 0) */
   } /* end FOR */
@@ -332,7 +335,7 @@ void setTimeShow(void) {
 
 void setTimeBegin(void) {
   RTC_ReadTime(&setRTC);
-  RTOS_SetTask(btnProcess, 500, 10);
+  RTOS_SetTask(btnProcess, 500, BTN_SCAN_PERIOD);
 }
 
 void setHHBegin(void) {
@@ -370,11 +373,11 @@ void setMMDec(void) {
 }
 
 void setTimeEnd(void) {
+  RTOS_SetTask(btnProcess, 2000, BTN_SCAN_PERIOD);
+
   setRTC.Sec = 0;
   RTC_WriteTime(&setRTC);
 
-  RTOS_SetTask(btnProcess, 2000, 10);
-
   RTOS_DeleteTask(blink);
   Flag.blink0 = 0;
   Flag.blink1 = 0;