Added support for 2nd encoder.

Added System sub menus.
pull/3/head
Holger Wirtz 5 years ago
parent e6f79d3254
commit 04f480efa6
  1. 110
      UI.hpp

110
UI.hpp

@ -28,6 +28,7 @@
#include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C.h>
#include <LCDMenuLib2.h> #include <LCDMenuLib2.h>
#include <Encoder.h>
#include "config.h" #include "config.h"
#define _LCDML_DISP_cols LCD_cols #define _LCDML_DISP_cols LCD_cols
@ -64,6 +65,12 @@ void UI_func_delay_feedback(uint8_t param);
void UI_func_delay_level(uint8_t param); void UI_func_delay_level(uint8_t param);
void UI_func_filter_cutoff(uint8_t param); void UI_func_filter_cutoff(uint8_t param);
void UI_func_filter_resonance(uint8_t param); void UI_func_filter_resonance(uint8_t param);
void UI_func_midi_channel(uint8_t param);
void UI_func_loudness(uint8_t param);
void UI_func_panorama(uint8_t param);
void UI_func_stereo_mono(uint8_t param);
void UI_func_polyphony(uint8_t param);
void UI_func_engine(uint8_t param);
void UI_func_back(uint8_t param); void UI_func_back(uint8_t param);
void UI_func_goToRootMenu(uint8_t param); void UI_func_goToRootMenu(uint8_t param);
@ -90,9 +97,15 @@ LCDML_add(15, LCDML_0_2_4, 1, "Cutoff", UI_func_filter_cutoff);
LCDML_add(16, LCDML_0_2_4, 2, "Resonance", UI_func_filter_resonance); LCDML_add(16, LCDML_0_2_4, 2, "Resonance", UI_func_filter_resonance);
LCDML_add(17, LCDML_0, 3, "Store", NULL); LCDML_add(17, LCDML_0, 3, "Store", NULL);
LCDML_add(18, LCDML_0, 4, "System", NULL); LCDML_add(18, LCDML_0, 4, "System", NULL);
LCDML_add(19, LCDML_0, 5, "Info", NULL); LCDML_add(19, LCDML_0_4, 1, "MIDI Channel", UI_func_midi_channel);
LCDML_add(20, LCDML_0_4, 2, "Loudness", UI_func_loudness);
LCDML_add(21, LCDML_0_4, 3, "Panorama", UI_func_panorama);
LCDML_add(22, LCDML_0_4, 4, "Stereo/Mono", UI_func_stereo_mono);
LCDML_add(23, LCDML_0_4, 5, "Polyphony", UI_func_polyphony);
LCDML_add(24, LCDML_0_4, 6, "Engine", UI_func_engine);
LCDML_add(25, LCDML_0, 5, "Info", NULL);
#define _LCDML_DISP_cnt 19 #define _LCDML_DISP_cnt 25
// create menu // create menu
LCDML_createMenu(_LCDML_DISP_cnt); LCDML_createMenu(_LCDML_DISP_cnt);
@ -101,15 +114,13 @@ LCDML_createMenu(_LCDML_DISP_cnt);
CONTROL CONTROL
***********************************************************************/ ***********************************************************************/
#define g_LCDML_CONTROL_button_long_press 800 // ms #define g_LCDML_CONTROL_button_long_press 800 // ms
#define g_LCDML_CONTROL_button_short_press 120 // ms #define g_LCDML_CONTROL_button_short_press 40 // ms
#define ENCODER_OPTIMIZE_INTERRUPTS //Only when using pin2/3 (or 20/21 on mega)
#include <Encoder.h>
Encoder ENCODER(ENC_R_PIN_B, ENC_R_PIN_A); //#define ENCODER_OPTIMIZE_INTERRUPTS //Only when using pin2/3 (or 20/21 on mega)
Encoder ENCODER[2] = {Encoder(ENC_L_PIN_A, ENC_L_PIN_B), Encoder(ENC_R_PIN_A, ENC_R_PIN_B)};
long g_LCDML_CONTROL_button_press_time = 0; long g_LCDML_CONTROL_button_press_time[2] = {0, 0};
bool g_LCDML_CONTROL_button_prev = HIGH; bool g_LCDML_CONTROL_button_prev[2] = {HIGH, HIGH};
void lcdml_menu_control(void) void lcdml_menu_control(void)
{ {
@ -119,62 +130,63 @@ void lcdml_menu_control(void)
//pinMode(ENC_R_PIN_A, INPUT_PULLUP); //pinMode(ENC_R_PIN_A, INPUT_PULLUP);
//pinMode(ENC_R_PIN_B, INPUT_PULLUP); //pinMode(ENC_R_PIN_B, INPUT_PULLUP);
pinMode(BUT_R_PIN, INPUT_PULLUP); pinMode(BUT_R_PIN, INPUT_PULLUP);
pinMode(BUT_L_PIN, INPUT_PULLUP);
} }
//Volatile Variable //Volatile Variable
long g_LCDML_CONTROL_Encoder_position = ENCODER.read(); long g_LCDML_CONTROL_Encoder_position[2] = {ENCODER[0].read(), ENCODER[1].read()};
bool button = digitalRead(BUT_R_PIN); bool button[2] = {digitalRead(BUT_R_PIN), digitalRead(BUT_L_PIN)};
if (g_LCDML_CONTROL_Encoder_position <= -3) { if (g_LCDML_CONTROL_Encoder_position[0] <= -3) {
if (!button) if (!button[0])
{ {
LCDML.BT_left(); LCDML.BT_left();
g_LCDML_CONTROL_button_prev = LOW; g_LCDML_CONTROL_button_prev[0] = LOW;
g_LCDML_CONTROL_button_press_time = -1; g_LCDML_CONTROL_button_press_time[0] = -1;
} }
else else
{ {
LCDML.BT_down(); LCDML.BT_down();
} }
ENCODER.write(g_LCDML_CONTROL_Encoder_position + 4); ENCODER[0].write(g_LCDML_CONTROL_Encoder_position[0] + 4);
} }
else if (g_LCDML_CONTROL_Encoder_position >= 3) else if (g_LCDML_CONTROL_Encoder_position[0] >= 3)
{ {
if (!button) if (!button[0])
{ {
LCDML.BT_right(); LCDML.BT_right();
g_LCDML_CONTROL_button_prev = LOW; g_LCDML_CONTROL_button_prev[0] = LOW;
g_LCDML_CONTROL_button_press_time = -1; g_LCDML_CONTROL_button_press_time[0] = -1;
} }
else else
{ {
LCDML.BT_up(); LCDML.BT_up();
} }
ENCODER.write(g_LCDML_CONTROL_Encoder_position - 4); ENCODER[0].write(g_LCDML_CONTROL_Encoder_position[0] - 4);
} }
else else
{ {
if (!button && g_LCDML_CONTROL_button_prev) //falling edge, button pressed if (!button[0] && g_LCDML_CONTROL_button_prev[0]) //falling edge, button pressed
{ {
g_LCDML_CONTROL_button_prev = LOW; g_LCDML_CONTROL_button_prev[0] = LOW;
g_LCDML_CONTROL_button_press_time = millis(); g_LCDML_CONTROL_button_press_time[0] = millis();
} }
else if (button && !g_LCDML_CONTROL_button_prev) //rising edge, button not active else if (button[0] && !g_LCDML_CONTROL_button_prev[0]) //rising edge, button not active
{ {
g_LCDML_CONTROL_button_prev = HIGH; g_LCDML_CONTROL_button_prev[0] = HIGH;
if (g_LCDML_CONTROL_button_press_time < 0) if (g_LCDML_CONTROL_button_press_time[0] < 0)
{ {
g_LCDML_CONTROL_button_press_time = millis(); g_LCDML_CONTROL_button_press_time[0] = millis();
//Reset for left right action //Reset for left right action
} }
else if ((millis() - g_LCDML_CONTROL_button_press_time) >= g_LCDML_CONTROL_button_long_press) else if ((millis() - g_LCDML_CONTROL_button_press_time[0]) >= g_LCDML_CONTROL_button_long_press)
{ {
LCDML.BT_quit(); LCDML.BT_quit();
} }
else if ((millis() - g_LCDML_CONTROL_button_press_time) >= g_LCDML_CONTROL_button_short_press) else if ((millis() - g_LCDML_CONTROL_button_press_time[0]) >= g_LCDML_CONTROL_button_short_press)
{ {
LCDML.BT_enter(); LCDML.BT_enter();
} }
@ -317,7 +329,7 @@ void UI_func_sound(uint8_t param)
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
{ {
if (LCDML.BT_checkAny()) { // check if any button is pressed (enter, up, down, left, right) if (LCDML.BT_checkEnter()) { // check if any button is pressed (enter, up, down, left, right)
// LCDML_goToMenu stops a running menu function and goes to the menu // LCDML_goToMenu stops a running menu function and goes to the menu
LCDML.FUNC_goBackToMenu(); LCDML.FUNC_goBackToMenu();
} }
@ -384,6 +396,36 @@ void UI_func_filter_resonance(uint8_t param)
; ;
} }
void UI_func_midi_channel(uint8_t param)
{
;
}
void UI_func_loudness(uint8_t param)
{
;
}
void UI_func_panorama(uint8_t param)
{
;
}
void UI_func_stereo_mono(uint8_t param)
{
;
}
void UI_func_polyphony(uint8_t param)
{
;
}
void UI_func_engine(uint8_t param)
{
;
}
void UI_func_information(uint8_t param) void UI_func_information(uint8_t param)
{ {
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
@ -392,14 +434,14 @@ void UI_func_information(uint8_t param)
lcd.setCursor(0, 0); lcd.setCursor(0, 0);
lcd.print(F("MicroDexed")); lcd.print(F("MicroDexed"));
lcd.setCursor(0, 1); lcd.setCursor(0, 1);
lcd.print(F("LCDMenuLib2")); lcd.print(VERSION);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
{ {
// loop function, can be run in a loop when LCDML_DISP_triggerMenu(xx) is set // loop function, can be run in a loop when LCDML_DISP_triggerMenu(xx) is set
// the quit button works in every DISP function without any checks; it starts the loop_end function // the quit button works in every DISP function without any checks; it starts the loop_end function
if (LCDML.BT_checkAny()) { // check if any button is pressed (enter, up, down, left, right) if (LCDML.BT_checkEnter()) { // check if any button is pressed (enter, up, down, left, right)
// LCDML_goToMenu stops a running menu function and goes to the menu // LCDML_goToMenu stops a running menu function and goes to the menu
LCDML.FUNC_goBackToMenu(); LCDML.FUNC_goBackToMenu();
} }
@ -425,7 +467,7 @@ void UI_func_screensaver(uint8_t param)
if (LCDML.FUNC_loop()) if (LCDML.FUNC_loop())
{ {
if (LCDML.BT_checkAny()) // check if any button is pressed (enter, up, down, left, right) if (LCDML.BT_checkEnter()) // check if any button is pressed (enter, up, down, left, right)
{ {
LCDML.FUNC_goBackToMenu(); // leave this function LCDML.FUNC_goBackToMenu(); // leave this function
} }

Loading…
Cancel
Save