Fixed and optimized simple UI handling.

pull/4/head
Holger Wirtz 6 years ago
parent d4fe310fff
commit f43164b7d6
  1. 3
      MicroDexed.ino
  2. 52
      UI.cpp
  3. 2
      UI.h
  4. 1
      config.h
  5. 2
      dexed_sysex.cpp

@ -47,7 +47,7 @@ int32_t enc_val[2] = {INITIAL_ENC_L_VALUE, INITIAL_ENC_R_VALUE};
Bounce but[2] = {Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS), Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS)}; Bounce but[2] = {Bounce(BUT_L_PIN, BUT_DEBOUNCE_MS), Bounce(BUT_R_PIN, BUT_DEBOUNCE_MS)};
elapsedMillis master_timer; elapsedMillis master_timer;
uint8_t ui_state = UI_MAIN; uint8_t ui_state = UI_MAIN;
uint8_t ui_main_state = UI_MAIN_VOICE_SELECTED; uint8_t ui_main_state = UI_MAIN_VOICE;
#endif #endif
// GUItool: begin automatically generated code // GUItool: begin automatically generated code
@ -250,6 +250,7 @@ void setup()
#endif #endif
#ifdef I2C_DISPLAY #ifdef I2C_DISPLAY
lcd.clear();
ui_show_main(); ui_show_main();
#endif #endif

@ -38,6 +38,7 @@ void handle_ui(void)
{ {
if (ui_back_to_main >= UI_AUTO_BACK_MS && ui_state != UI_MAIN) if (ui_back_to_main >= UI_AUTO_BACK_MS && ui_state != UI_MAIN)
{ {
lcd.clear();
ui_show_main(); ui_show_main();
EEPROM.update(EEPROM_OFFSET + EEPROM_MASTER_VOLUME_ADDR, uint8_t(vol * UCHAR_MAX)); EEPROM.update(EEPROM_OFFSET + EEPROM_MASTER_VOLUME_ADDR, uint8_t(vol * UCHAR_MAX));
EEPROM.update(EEPROM_OFFSET + EEPROM_VOLUME_RIGHT_ADDR, uint8_t(vol_right * UCHAR_MAX)); EEPROM.update(EEPROM_OFFSET + EEPROM_VOLUME_RIGHT_ADDR, uint8_t(vol_right * UCHAR_MAX));
@ -58,15 +59,12 @@ void handle_ui(void)
switch (ui_main_state) switch (ui_main_state)
{ {
case UI_MAIN_BANK: case UI_MAIN_BANK:
case UI_MAIN_BANK_SELECTED:
ui_main_state = UI_MAIN_VOICE; ui_main_state = UI_MAIN_VOICE;
enc[1].write(voice); enc[1].write(voice);
enc_val[1] = enc[1].read(); enc_val[1] = enc[1].read();
break; break;
case UI_MAIN_VOICE: case UI_MAIN_VOICE:
ui_main_state = UI_MAIN_VOICE_SELECTED;
enc[1].write(voice);
enc_val[1] = enc[1].read();
break;
case UI_MAIN_VOICE_SELECTED: case UI_MAIN_VOICE_SELECTED:
ui_main_state = UI_MAIN_BANK; ui_main_state = UI_MAIN_BANK;
enc[1].write(bank); enc[1].write(bank);
@ -75,11 +73,14 @@ void handle_ui(void)
} }
break; break;
case 1: // right button pressed case 1: // right button pressed
ui_main_state = UI_MAIN_VOICE_SELECTED; if (ui_main_state == UI_MAIN_VOICE_SELECTED)
{
ui_main_state = UI_MAIN_VOICE;
load_sysex(bank, voice); load_sysex(bank, voice);
EEPROM.update(EEPROM_OFFSET + EEPROM_BANK_ADDR, bank); EEPROM.update(EEPROM_OFFSET + EEPROM_BANK_ADDR, bank);
EEPROM.update(EEPROM_OFFSET + EEPROM_VOICE_ADDR, voice); EEPROM.update(EEPROM_OFFSET + EEPROM_VOICE_ADDR, voice);
update_eeprom_checksum(); update_eeprom_checksum();
}
break; break;
} }
ui_show_main(); ui_show_main();
@ -107,35 +108,25 @@ void handle_ui(void)
switch (ui_main_state) switch (ui_main_state)
{ {
case UI_MAIN_BANK: case UI_MAIN_BANK:
ui_main_state = UI_MAIN_BANK_SELECTED;
case UI_MAIN_BANK_SELECTED:
if (enc[i].read() <= 0) if (enc[i].read() <= 0)
enc[i].write(0); enc[i].write(0);
else if (enc[i].read() > max_loaded_banks - 1) else if (enc[i].read() > max_loaded_banks - 1)
enc[i].write(max_loaded_banks - 1); enc[i].write(max_loaded_banks - 1);
bank = enc[i].read(); bank = enc[i].read();
if (!get_voice_names_from_bank(bank))
{
bank--;
enc[i].write(bank);
get_voice_names_from_bank(bank); get_voice_names_from_bank(bank);
}
break; break;
case UI_MAIN_VOICE: case UI_MAIN_VOICE:
ui_main_state = UI_MAIN_VOICE_SELECTED;
case UI_MAIN_VOICE_SELECTED:
if (enc[i].read() <= 0) if (enc[i].read() <= 0)
enc[i].write(0); enc[i].write(0);
else if (enc[i].read() > MAX_VOICES - 1) else if (enc[i].read() > MAX_VOICES - 1)
enc[i].write(MAX_VOICES - 1); enc[i].write(MAX_VOICES - 1);
voice = enc[i].read(); voice = enc[i].read();
break; break;
case UI_MAIN_VOICE_SELECTED:
ui_main_state = UI_MAIN_VOICE;
if (enc[i].read() <= 0)
enc[i].write(0);
else if (enc[i].read() >= MAX_VOICES-1)
enc[i].write(MAX_VOICES);
voice = enc[i].read();
break;
} }
get_voice_names_from_bank(bank);
ui_show_main(); ui_show_main();
break; break;
} }
@ -154,7 +145,6 @@ void ui_show_main(void)
{ {
ui_state = UI_MAIN; ui_state = UI_MAIN;
lcd.clear();
lcd.show(0, 0, 2, bank + 1); lcd.show(0, 0, 2, bank + 1);
lcd.show(0, 2, 1, " "); lcd.show(0, 2, 1, " ");
strip_extension(bank_names[bank], bank_name); strip_extension(bank_names[bank], bank_name);
@ -165,25 +155,39 @@ void ui_show_main(void)
lcd.show(0, 3, 10, bank_name); lcd.show(0, 3, 10, bank_name);
lcd.show(0, 14, 1, "]"); lcd.show(0, 14, 1, "]");
} }
else if (ui_main_state == UI_MAIN_BANK_SELECTED)
{
lcd.show(0, 2, 1, "<");
lcd.show(0, 3, 10, bank_name);
lcd.show(0, 14, 1, ">");
}
else else
{
lcd.show(0, 2, 1, " ");
lcd.show(0, 3, 10, bank_name); lcd.show(0, 3, 10, bank_name);
lcd.show(0, 14, 1, " ");
}
lcd.show(1, 0, 2, voice + 1); lcd.show(1, 0, 2, voice + 1);
lcd.show(1, 2, 1, " "); lcd.show(1, 2, 1, " ");
if (ui_main_state == UI_MAIN_VOICE) if (ui_main_state == UI_MAIN_VOICE)
{ {
lcd.show(1, 2, 1, "<"); lcd.show(1, 2, 1, "[");
lcd.show(1, 3, 10, voice_names[voice]); lcd.show(1, 3, 10, voice_names[voice]);
lcd.show(1, 14, 1, ">"); lcd.show(1, 14, 1, "]");
} }
else if (ui_main_state == UI_MAIN_VOICE_SELECTED) else if (ui_main_state == UI_MAIN_VOICE_SELECTED)
{ {
lcd.show(1, 2, 1, "["); lcd.show(1, 2, 1, "<");
lcd.show(1, 3, 10, voice_names[voice]); lcd.show(1, 3, 10, voice_names[voice]);
lcd.show(1, 14, 1, "]"); lcd.show(1, 14, 1, ">");
} }
else else
{
lcd.show(1, 2, 1, " ");
lcd.show(1, 3, 10, voice_names[voice]); lcd.show(1, 3, 10, voice_names[voice]);
lcd.show(1, 14, 1, " ");
}
} }
void ui_show_volume(void) void ui_show_volume(void)

@ -54,7 +54,7 @@ void ui_show_main(void);
void ui_show_volume(void); void ui_show_volume(void);
enum ui_states {UI_MAIN, UI_VOLUME}; enum ui_states {UI_MAIN, UI_VOLUME};
enum ui_main_states {UI_MAIN_BANK, UI_MAIN_VOICE, UI_MAIN_VOICE_SELECTED}; enum ui_main_states {UI_MAIN_BANK, UI_MAIN_VOICE, UI_MAIN_BANK_SELECTED, UI_MAIN_VOICE_SELECTED};
class MyEncoder : public Encoder class MyEncoder : public Encoder
{ {

@ -33,6 +33,7 @@
#define CONFIG_H_INCLUDED #define CONFIG_H_INCLUDED
// Initial values // Initial values
#define VERSION 1.0
#define MIDI_DEVICE Serial1 #define MIDI_DEVICE Serial1
#define USE_ONBOARD_USB_HOST 1 #define USE_ONBOARD_USB_HOST 1
#define TEENSY_AUDIO_BOARD 1 #define TEENSY_AUDIO_BOARD 1

@ -253,7 +253,7 @@ bool load_sysex(uint8_t b, uint8_t v)
Serial.print(sysex_file_name); Serial.print(sysex_file_name);
Serial.print(F(" [")); Serial.print(F(" ["));
Serial.print(voice_names[v]); Serial.print(voice_names[v]);
Serial.println(F(" [")); Serial.println(F("]"));
#endif #endif
return (dexed->loadSysexVoice(data)); return (dexed->loadSysexVoice(data));
} }

Loading…
Cancel
Save