Fixed lcd_display_bar() function for showing bar with min/max setup.

Replaced visualisation in some functions with lcd_display_bar().
pull/32/head
Holger Wirtz 5 years ago
parent ac896d9685
commit 5b2b663af0
  1. 152
      UI.hpp

152
UI.hpp

@ -202,7 +202,7 @@ void UI_function_not_enabled(void);
void UI_function_not_implemented(uint8_t param); void UI_function_not_implemented(uint8_t param);
void lcd_display_int(int16_t var, uint8_t size, bool zeros, bool brackets, bool sign); void lcd_display_int(int16_t var, uint8_t size, bool zeros, bool brackets, bool sign);
void lcd_display_float(float var, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign); void lcd_display_float(float var, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign);
void lcd_display_bar(const char* title, uint32_t value, uint32_t max_value, bool init); void lcd_display_bar(const char* title, uint32_t value, uint32_t min_value, uint32_t max_value, bool init);
void lcd_special_chars(uint8_t mode); void lcd_special_chars(uint8_t mode);
// normal menu // normal menu
@ -2093,15 +2093,8 @@ void UI_func_pb_range(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
// setup function // setup function
lcd.setCursor(0, 0); lcd_special_chars(BLOCKBAR);
lcd.print(F("PB Range")); lcd_display_bar("PB Range", configuration.dexed[instance_id].pb_range, PB_RANGE_MIN, PB_RANGE_MAX, true);
#ifdef DEBUG
Serial.println(F("Entering UI_func_pb_range()"));
Serial.print(F("configuration.dexed["));
Serial.print(instance_id, DEC);
Serial.print(F("].pb_range="));
Serial.println(configuration.dexed[instance_id].pb_range, DEC);
#endif
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2130,19 +2123,12 @@ void UI_func_pb_range(uint8_t param)
MicroDexed[instance_id]->setPBController(configuration.dexed[instance_id].pb_range, configuration.dexed[instance_id].pb_step); MicroDexed[instance_id]->setPBController(configuration.dexed[instance_id].pb_range, configuration.dexed[instance_id].pb_step);
} }
lcd.setCursor(0, 1); lcd_display_bar("PB Range", configuration.dexed[instance_id].pb_range, PB_RANGE_MIN, PB_RANGE_MAX, false);
lcd_display_int(configuration.dexed[instance_id].pb_range, 2, false, true, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {
#ifdef DEBUG lcd_special_chars(SCROLLBAR);
Serial.println(F("Entering UI_func_pb_range()"));
Serial.print(F("configuration.dexed["));
Serial.print(instance_id, DEC);
Serial.print(F("].pb_range="));
Serial.println(configuration.dexed[instance_id].pb_range, DEC);
#endif
eeprom_write(); eeprom_write();
} }
} }
@ -2157,8 +2143,8 @@ void UI_func_pb_step(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
// setup function // setup function
lcd.setCursor(0, 0); lcd_special_chars(BLOCKBAR);
lcd.print(F("PB Step")); lcd_display_bar("PB Step", configuration.dexed[instance_id].pb_step, PB_STEP_MIN, PB_STEP_MAX, true);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2187,13 +2173,13 @@ void UI_func_pb_step(uint8_t param)
MicroDexed[instance_id]->setPBController(configuration.dexed[instance_id].pb_range, configuration.dexed[instance_id].pb_step); MicroDexed[instance_id]->setPBController(configuration.dexed[instance_id].pb_range, configuration.dexed[instance_id].pb_step);
} }
lcd.setCursor(0, 1); lcd_display_bar("PB Step", configuration.dexed[instance_id].pb_step, PB_STEP_MIN, PB_STEP_MAX, false);
lcd_display_int(configuration.dexed[instance_id].pb_step, 2, false, true, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {
// you can here reset some global vars or do nothing // you can here reset some global vars or do nothing
lcd_special_chars(SCROLLBAR);
eeprom_write(); eeprom_write();
} }
} }
@ -2208,8 +2194,8 @@ void UI_func_mw_range(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
// setup function // setup function
lcd.setCursor(0, 0); lcd_special_chars(BLOCKBAR);
lcd.print(F("MW Range")); lcd_display_bar("MW Range", configuration.dexed[instance_id].mw_range, MW_RANGE_MIN, MW_RANGE_MAX, true);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2238,13 +2224,13 @@ void UI_func_mw_range(uint8_t param)
MicroDexed[instance_id]->setMWController(configuration.dexed[instance_id].mw_range, configuration.dexed[instance_id].mw_assign); MicroDexed[instance_id]->setMWController(configuration.dexed[instance_id].mw_range, configuration.dexed[instance_id].mw_assign);
} }
lcd.setCursor(0, 1); lcd_display_bar("MW Range", configuration.dexed[instance_id].mw_range, MW_RANGE_MIN, MW_RANGE_MAX, false);
lcd_display_int(configuration.dexed[instance_id].mw_range, 2, false, true, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {
// you can here reset some global vars or do nothing // you can here reset some global vars or do nothing
lcd_special_chars(SCROLLBAR);
eeprom_write(); eeprom_write();
} }
} }
@ -2286,7 +2272,6 @@ void UI_func_mw_assign(uint8_t param)
} }
} }
MicroDexed[instance_id]->setMWController(configuration.dexed[instance_id].mw_range, configuration.dexed[instance_id].mw_assign); MicroDexed[instance_id]->setMWController(configuration.dexed[instance_id].mw_range, configuration.dexed[instance_id].mw_assign);
} }
@ -2337,8 +2322,8 @@ void UI_func_fc_range(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
// setup function // setup function
lcd.setCursor(0, 0); lcd_special_chars(BLOCKBAR);
lcd.print(F("FC Range")); lcd_display_bar("FC Range", configuration.dexed[instance_id].fc_range, FC_RANGE_MIN, FC_RANGE_MAX, true);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2366,13 +2351,14 @@ void UI_func_fc_range(uint8_t param)
MicroDexed[instance_id]->setFCController(configuration.dexed[instance_id].fc_range, configuration.dexed[instance_id].fc_assign); MicroDexed[instance_id]->setFCController(configuration.dexed[instance_id].fc_range, configuration.dexed[instance_id].fc_assign);
} }
lcd.setCursor(0, 1);
lcd_display_int(configuration.dexed[instance_id].fc_range, 2, false, true, false); lcd_display_bar("FC Range", configuration.dexed[instance_id].fc_range, FC_RANGE_MIN, FC_RANGE_MAX, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {
// you can here reset some global vars or do nothing // you can here reset some global vars or do nothing
lcd_special_chars(SCROLLBAR);
eeprom_write(); eeprom_write();
} }
} }
@ -2465,8 +2451,8 @@ void UI_func_bc_range(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
// setup function // setup function
lcd.setCursor(0, 0); lcd_special_chars(BLOCKBAR);
lcd.print(F("BC Range")); lcd_display_bar("BC Range", configuration.dexed[instance_id].bc_range, BC_RANGE_MIN, BC_RANGE_MAX, true);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2495,13 +2481,13 @@ void UI_func_bc_range(uint8_t param)
MicroDexed[instance_id]->setBCController(configuration.dexed[instance_id].bc_range, configuration.dexed[instance_id].bc_assign); MicroDexed[instance_id]->setBCController(configuration.dexed[instance_id].bc_range, configuration.dexed[instance_id].bc_assign);
} }
lcd.setCursor(0, 1); lcd_display_bar("BC Range", configuration.dexed[instance_id].bc_range, BC_RANGE_MIN, BC_RANGE_MAX, false);
lcd_display_int(configuration.dexed[instance_id].bc_range, 2, false, true, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {
// you can here reset some global vars or do nothing // you can here reset some global vars or do nothing
lcd_special_chars(SCROLLBAR);
eeprom_write(); eeprom_write();
} }
} }
@ -2593,8 +2579,8 @@ void UI_func_at_range(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
// setup function // setup function
lcd.setCursor(0, 0); lcd_special_chars(BLOCKBAR);
lcd.print(F("AT Range")); lcd_display_bar("AT Range", configuration.dexed[instance_id].at_range, AT_RANGE_MIN, AT_RANGE_MAX, true);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2623,13 +2609,13 @@ void UI_func_at_range(uint8_t param)
MicroDexed[instance_id]->setATController(configuration.dexed[instance_id].at_range, configuration.dexed[instance_id].at_assign); MicroDexed[instance_id]->setATController(configuration.dexed[instance_id].at_range, configuration.dexed[instance_id].at_assign);
} }
lcd.setCursor(0, 1); lcd_display_bar("AT Range", configuration.dexed[instance_id].at_range, AT_RANGE_MIN, AT_RANGE_MAX, false);
lcd_display_int(configuration.dexed[instance_id].at_range, 2, false, true, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {
// you can here reset some global vars or do nothing // you can here reset some global vars or do nothing
lcd_special_chars(SCROLLBAR);
eeprom_write(); eeprom_write();
} }
} }
@ -2845,7 +2831,7 @@ void UI_func_portamento_time(uint8_t param)
if (LCDML.FUNC_setup()) // ****** SETUP ********* if (LCDML.FUNC_setup()) // ****** SETUP *********
{ {
lcd_special_chars(BLOCKBAR); lcd_special_chars(BLOCKBAR);
lcd_display_bar("Portam. Time", configuration.dexed[instance_id].portamento_time, PORTAMENTO_TIME_MAX, true); lcd_display_bar("Portam. Time", configuration.dexed[instance_id].portamento_time, PORTAMENTO_TIME_MIN, PORTAMENTO_TIME_MAX, true);
} }
if (LCDML.FUNC_loop()) // ****** LOOP ********* if (LCDML.FUNC_loop()) // ****** LOOP *********
@ -2873,12 +2859,8 @@ void UI_func_portamento_time(uint8_t param)
MicroDexed[instance_id]->setPortamentoMode(configuration.dexed[instance_id].portamento_mode, configuration.dexed[instance_id].portamento_glissando, configuration.dexed[instance_id].portamento_time); MicroDexed[instance_id]->setPortamentoMode(configuration.dexed[instance_id].portamento_mode, configuration.dexed[instance_id].portamento_glissando, configuration.dexed[instance_id].portamento_time);
} }
/*
lcd.setCursor(0, 1);
lcd_display_int(configuration.dexed[instance_id].portamento_time, 2, false, true, false);
*/
lcd_display_bar("Portam. Time", configuration.dexed[instance_id].portamento_time, PORTAMENTO_TIME_MAX, false); lcd_display_bar("Portam. Time", configuration.dexed[instance_id].portamento_time, PORTAMENTO_TIME_MIN, PORTAMENTO_TIME_MAX, false);
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
@ -3147,11 +3129,11 @@ void UI_func_volume(uint8_t param)
if (menu_state != MENU_VOLUME) if (menu_state != MENU_VOLUME)
{ {
lcd_special_chars(BLOCKBAR); lcd_special_chars(BLOCKBAR);
lcd_display_bar("Volume", configuration.vol, VOLUME_MAX, true); lcd_display_bar("Volume", configuration.vol, VOLUME_MIN, VOLUME_MAX, true);
menu_state = MENU_VOLUME; menu_state = MENU_VOLUME;
} }
else else
lcd_display_bar("Volume", configuration.vol, VOLUME_MAX, false); lcd_display_bar("Volume", configuration.vol, VOLUME_MIN, VOLUME_MAX, false);
set_volume(configuration.vol, configuration.mono); set_volume(configuration.vol, configuration.mono);
eeprom_write(); eeprom_write();
@ -3393,9 +3375,9 @@ void lcd_display_float(float var, uint8_t size_number, uint8_t size_fraction, bo
lcd.print(F("]")); lcd.print(F("]"));
} }
void lcd_display_bar(const char* title, uint32_t value, uint32_t max_value, bool init) void lcd_display_bar(const char* title, uint32_t value, uint32_t min_value, uint32_t max_value, bool init)
{ {
float _v = float(value * LCD_cols) / max_value; float _v = float(value * LCD_cols) / (max_value - min_value);
float _vi; float _vi;
uint8_t vf = uint8_t(modff(_v, &_vi) * 10.0); uint8_t vf = uint8_t(modff(_v, &_vi) * 10.0);
uint8_t vi = uint8_t(_vi); uint8_t vi = uint8_t(_vi);
@ -3407,53 +3389,83 @@ void lcd_display_bar(const char* title, uint32_t value, uint32_t max_value, bool
lcd_display_int(value, 3, true, false, false); lcd_display_int(value, 3, true, false, false);
lcd.setCursor(0, 1); lcd.setCursor(0, 1);
if (vi == 0 && uint8_t(vf / 2) == 0)
{
lcd.setCursor(0, 1);
lcd.write((uint8_t)0); // minimal block
}
else
{
for (uint8_t i = 0; i < LCD_cols; i++) for (uint8_t i = 0; i < LCD_cols; i++)
{ {
if (i < uint8_t(vi)) if (i < vi)
lcd.write((uint8_t)4); // full block lcd.write((uint8_t)4); // full block
else else
lcd.print(F(" ")); lcd.print(F(" "));
} }
if (vi == 0 && uint8_t(vf / 2) == 0) if (vf > 1)
{
lcd.setCursor(0, 1);
lcd.write((uint8_t)0);
}
else if (vf > 0)
{ {
lcd.setCursor(vi + 1, 1); lcd.setCursor(vi - 1, 1);
lcd.write((uint8_t)int(vf / 2) - 1); lcd.write((uint8_t)int(vf / 2) - 1);
} }
} }
}
else else
{ {
uint8_t ca = (float((LCD_cols) / (max_value - min_value)) + 0.5) + 1;
lcd.setCursor(strlen(title) + 1, 0); lcd.setCursor(strlen(title) + 1, 0);
lcd_display_int(value, 3, true, false, false); lcd_display_int(value, 3, true, false, false);
if (vi > 0) if (vi == 0 && uint8_t(vf / 2) == 0)
{ {
lcd.setCursor(vi - 1, 1); lcd.setCursor(0, 1);
lcd.write((uint8_t)4); // full block lcd.write((uint8_t)0); // minimal block
if (vf > 0) for (uint8_t n = 1; n <= ca; n++)
lcd.write((uint8_t)int(vf / 2) - 1);
lcd.print(F(" ")); lcd.print(F(" "));
} }
else if (uint8_t(vf / 2) == 0) else if (vi == LCD_cols && uint8_t(vf / 2) == 0)
{ {
lcd.setCursor(0, 1); lcd.setCursor(LCD_cols - ca - 1, 1);
lcd.write((uint8_t)0); lcd.write((uint8_t)4); // full block
lcd.print(F(" ")); for (uint8_t n = LCD_cols - ca; n < LCD_cols; n++)
lcd.write((uint8_t)4); // full block
} }
else
{
uint8_t b, e;
if (uint8_t(vf / 2) != 0) if (vi - ca < 0)
b = 0;
else
b = vi - ca;
if (vi + ca >= LCD_cols)
e = LCD_cols;
else
e = vi + ca;
Serial.print("ca=");
Serial.print(ca);
Serial.print(" b=");
Serial.print(b);
Serial.print(" e=");
Serial.print(e);
Serial.println();
lcd.setCursor(b - 1, 1);
for (uint8_t n = b; n <= e; n++)
{ {
lcd.setCursor(vi, 1); if (n < vi)
lcd.write((uint8_t)int(vf / 2) - 1); lcd.write((uint8_t)4); // full block
else if (n == vi && uint8_t(vf / 2) != 0)
lcd.write((uint8_t)uint8_t(vf / 2) - 1);
else
lcd.print(F(" ")); lcd.print(F(" "));
} }
} }
} }
}
void lcd_special_chars(uint8_t mode) void lcd_special_chars(uint8_t mode)
{ {

Loading…
Cancel
Save