From 19cf6d927577fbea3d987f60071ab80502031414 Mon Sep 17 00:00:00 2001 From: Holger Wirtz Date: Fri, 11 Oct 2019 11:28:46 +0200 Subject: [PATCH] Fixes. --- MicroDexed.ino | 2 +- UI.hpp | 112 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 84 insertions(+), 30 deletions(-) diff --git a/MicroDexed.ino b/MicroDexed.ino index f1fddd3..7452e66 100644 --- a/MicroDexed.ino +++ b/MicroDexed.ino @@ -144,7 +144,7 @@ void setup() // Enable Menu Rollover //LCDML.MENU_enRollover(); // Enable Screensaver (screensaver menu function, time to activate in ms) - LCDML.SCREEN_enable(UI_func_voice_selection, VOICE_SELECTION_MS); // set to 10 seconds + //LCDML.SCREEN_enable(UI_func_voice_selection, VOICE_SELECTION_MS); // set to 10 seconds #else Serial.println(F("NO LCD DISPLAY ENABLED!")); #endif diff --git a/UI.hpp b/UI.hpp index 2402317..5027110 100644 --- a/UI.hpp +++ b/UI.hpp @@ -51,8 +51,8 @@ const uint8_t scroll_bar[5][8] = { }; enum { ENC_R, ENC_L }; -enum { MENU_R_SHOW, MENU_R_EDIT}; -uint8_t menu_state = MENU_R_SHOW; +enum { MENU_VOICE, MENU_EDIT}; +uint8_t menu_state = MENU_EDIT; void lcdml_menu_display(void); void lcdml_voice_menu_display(void); @@ -137,12 +137,14 @@ void lcdml_menu_control(void) if (LCDML.BT_setup()) { pinMode(BUT_R_PIN, INPUT_PULLUP); + pinMode(BUT_L_PIN, INPUT_PULLUP); } //Volatile Variable long g_LCDML_CONTROL_Encoder_position[NUM_ENCODER] = {ENCODER[ENC_R].read(), ENCODER[ENC_L].read()}; bool button[NUM_ENCODER] = {digitalRead(BUT_R_PIN), digitalRead(BUT_L_PIN)}; + // Right encoder if (g_LCDML_CONTROL_Encoder_position[ENC_R] <= -3) { if (!button[ENC_R]) @@ -153,7 +155,7 @@ void lcdml_menu_control(void) } else { - if (menu_state == MENU_R_SHOW) + if (menu_state == MENU_EDIT) LCDML.BT_down(); } ENCODER[ENC_R].write(g_LCDML_CONTROL_Encoder_position[ENC_R] + 4); @@ -169,7 +171,7 @@ void lcdml_menu_control(void) } else { - if (menu_state == MENU_R_SHOW) + if (menu_state == MENU_EDIT) LCDML.BT_up(); } ENCODER[ENC_R].write(g_LCDML_CONTROL_Encoder_position[ENC_R] - 4); @@ -200,24 +202,84 @@ void lcdml_menu_control(void) } } } - /* - // checking encoder left (volume) - if (g_LCDML_CONTROL_old_var[ENC_L] != g_LCDML_CONTROL_Encoder_position[ENC_L]) + + // Left encoder + if (g_LCDML_CONTROL_Encoder_position[ENC_L] <= -3) + { + if (!button[ENC_L]) + { + //LCDML.BT_left(); + g_LCDML_CONTROL_button_prev[ENC_L] = LOW; + g_LCDML_CONTROL_button_press_time[ENC_L] = -1; + } + else + { + +#ifdef DEBUG + Serial.println(F("Volume +")); +#endif + } + ENCODER[ENC_L].write(g_LCDML_CONTROL_Encoder_position[ENC_L] + 4); + } + else if (g_LCDML_CONTROL_Encoder_position[ENC_L] >= 3) + { + + if (!button[ENC_L]) + { + //LCDML.BT_right(); + g_LCDML_CONTROL_button_prev[ENC_L] = LOW; + g_LCDML_CONTROL_button_press_time[ENC_L] = -1; + } + else + { +#ifdef DEBUG + Serial.println(F("Volume -")); +#endif + } + ENCODER[ENC_L].write(g_LCDML_CONTROL_Encoder_position[ENC_L] - 4); + } + else + { + if (!button[ENC_L] && g_LCDML_CONTROL_button_prev[ENC_L]) //falling edge, button[ENC_L] pressed { - if (g_LCDML_CONTROL_Encoder_position[ENC_L] <= -3) + g_LCDML_CONTROL_button_prev[ENC_L] = LOW; + g_LCDML_CONTROL_button_press_time[ENC_L] = millis(); + } + else if (button[ENC_L] && !g_LCDML_CONTROL_button_prev[ENC_L]) //rising edge, button[ENC_L] not active + { + g_LCDML_CONTROL_button_prev[ENC_L] = HIGH; + + if (g_LCDML_CONTROL_button_press_time[ENC_L] < 0) { - #ifdef DEBUG - Serial.println(F("Volume +")); - #endif + g_LCDML_CONTROL_button_press_time[ENC_L] = millis(); + //Reset for left right action } - else if (g_LCDML_CONTROL_Encoder_position[ENC_L] >= 3) + else if ((millis() - g_LCDML_CONTROL_button_press_time[ENC_L]) >= g_LCDML_CONTROL_button_long_press) { - #ifdef DEBUG - Serial.println(F("Volume -")); - #endif + //LCDML.BT_quit(); +#ifdef DEBUG + Serial.println(F("Encoder left long press")); +#endif } - g_LCDML_CONTROL_old_var[ENC_L] = g_LCDML_CONTROL_Encoder_position[ENC_L]; - }*/ + else if ((millis() - g_LCDML_CONTROL_button_press_time[ENC_L]) >= g_LCDML_CONTROL_button_short_press) + { + //LCDML.BT_enter(); +#ifdef DEBUG + Serial.println(F("Encoder left short press")); +#endif + if (menu_state == MENU_EDIT) + { + menu_state = MENU_VOICE; + LCDML.OTHER_jumpToFunc(UI_func_voice_selection,0); + } + else if (menu_state == MENU_VOICE) + { + menu_state = MENU_EDIT; + LCDML.MENU_goRoot(); + } + } + } + } } /*********************************************************************** @@ -349,7 +411,7 @@ void UI_func_sound(uint8_t param) lcd.setCursor(0, 0); lcd.print(F("Filter Res.")); lcd.setCursor(0, 1); - lcd.print(F("")); + lcd.print(F("")); } if (LCDML.FUNC_loop()) // ****** LOOP ********* @@ -483,6 +545,7 @@ void UI_func_voice_selection(uint8_t param) if (LCDML.FUNC_setup()) // ****** SETUP ********* { // update LCD content + lcd.clear(); lcd.setCursor(0, 0); // set cursor lcd.print("screensaver"); // print change content lcd.setCursor(0, 1); // set cursor @@ -492,9 +555,9 @@ void UI_func_voice_selection(uint8_t param) if (LCDML.FUNC_loop()) { - if (LCDML.BT_checkEnter()) // check if any button is pressed (enter, up, down, left, right) + if (LCDML.BT_checkEnter()) { - LCDML.FUNC_goBackToMenu(); // leave this function + LCDML.MENU_goRoot(); } } @@ -505,14 +568,5 @@ void UI_func_voice_selection(uint8_t param) } } -void UI_func_goToRootMenu(uint8_t param) -{ - if (LCDML.FUNC_setup()) // ****** SETUP ********* - { - // go to root and display menu - LCDML.MENU_goRoot(); - } -} - #endif #endif