|
|
|
@ -211,6 +211,7 @@ 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_float(float var, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign); |
|
|
|
|
void lcd_display_bar_int(const char* title, uint32_t value, float factor, uint32_t min_value, uint32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init); |
|
|
|
|
void lcd_display_bar_float(const char* title, float value, float factor, uint32_t min_value, uint32_t max_value, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign, bool init); |
|
|
|
|
void lcd_special_chars(uint8_t mode); |
|
|
|
|
|
|
|
|
|
// normal menu
|
|
|
|
@ -966,10 +967,10 @@ void UI_func_chorus_frequency(uint8_t param) |
|
|
|
|
if (LCDML.FUNC_setup()) // ****** SETUP *********
|
|
|
|
|
{ |
|
|
|
|
// setup function
|
|
|
|
|
//lcd_special_chars(BLOCKBAR);
|
|
|
|
|
//lcd_display_bar_float("Chorus Frq.", configuration.chorus_frequency, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 3, false, false, false, true);
|
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print(F("Chorus Frequency")); |
|
|
|
|
lcd_special_chars(BLOCKBAR); |
|
|
|
|
lcd_display_bar_float("Chorus Frq.", configuration.chorus_frequency, 0.1, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 2, 1, false, false, false, true); |
|
|
|
|
/* lcd.setCursor(0, 0);
|
|
|
|
|
lcd.print(F("Chorus Frequency")); */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_loop()) // ****** LOOP *********
|
|
|
|
@ -987,16 +988,17 @@ void UI_func_chorus_frequency(uint8_t param) |
|
|
|
|
|
|
|
|
|
chorus_modulator.frequency(configuration.chorus_frequency / 10.0); |
|
|
|
|
|
|
|
|
|
//lcd_display_bar_float("Chorus Frq.", configuration.chorus_frequency, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 3, false, false, false, true);
|
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_float(configuration.chorus_frequency / 10.0, 2, 1, false, true, false); |
|
|
|
|
lcd.print(F(" Hz")); |
|
|
|
|
lcd_display_bar_float("Chorus Frq.", configuration.chorus_frequency, 0.1, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 2, 1, false, false, false, false); |
|
|
|
|
|
|
|
|
|
/*lcd.setCursor(0, 1);
|
|
|
|
|
lcd_display_float(configuration.chorus_frequency / 10.0, 2, 1, false, true, false); |
|
|
|
|
lcd.print(F(" Hz"));*/ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
|
{ |
|
|
|
|
//lcd_special_chars(SCROLLBAR);
|
|
|
|
|
lcd_special_chars(SCROLLBAR); |
|
|
|
|
eeprom_write(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1409,6 +1411,8 @@ void UI_func_transpose(uint8_t param) |
|
|
|
|
// setup function
|
|
|
|
|
lcd.setCursor(0, 0); |
|
|
|
|
lcd.print(F("Transpose")); |
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_int(configuration.dexed[instance_id].transpose - 24, 2, true, true, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_loop()) // ****** LOOP *********
|
|
|
|
@ -1424,12 +1428,12 @@ void UI_func_transpose(uint8_t param) |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
configuration.dexed[instance_id].transpose = constrain(configuration.dexed[instance_id].transpose - ENCODER[ENC_R].speed(), TRANSPOSE_MIN, TRANSPOSE_MAX); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_int(configuration.dexed[instance_id].transpose - 24, 2, true, true, true); |
|
|
|
|
|
|
|
|
|
MicroDexed[instance_id]->data[DEXED_VOICE_OFFSET + DEXED_TRANSPOSE] = configuration.dexed[instance_id].transpose; |
|
|
|
|
MicroDexed[instance_id]->notesOff(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_int(configuration.dexed[instance_id].transpose - 24, 1, false, true, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
@ -1453,6 +1457,8 @@ void UI_func_tune(uint8_t param) |
|
|
|
|
lcd.print(F("Tune")); |
|
|
|
|
lcd.setCursor(6, 1); |
|
|
|
|
lcd.print(F("cent")); |
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_int(configuration.dexed[instance_id].tune - 100, 3, true, true, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_loop()) // ****** LOOP *********
|
|
|
|
@ -1468,12 +1474,12 @@ void UI_func_tune(uint8_t param) |
|
|
|
|
else if (LCDML.BT_checkUp()) |
|
|
|
|
configuration.dexed[instance_id].tune = constrain(configuration.dexed[instance_id].tune - ENCODER[ENC_R].speed(), TUNE_MIN, TUNE_MAX); |
|
|
|
|
|
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_int(configuration.dexed[instance_id].tune - 100, 3, true, true, true); |
|
|
|
|
|
|
|
|
|
MicroDexed[instance_id]->controllers.masterTune = (int((configuration.dexed[instance_id].tune - 100) / 100.0 * 0x4000) << 11) * (1.0 / 12); |
|
|
|
|
MicroDexed[instance_id]->doRefreshVoice(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
lcd_display_int(configuration.dexed[instance_id].tune - 100, 1, false, true, true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (LCDML.FUNC_close()) // ****** STABLE END *********
|
|
|
|
@ -3189,111 +3195,79 @@ void UI_function_not_implemented(uint8_t param) |
|
|
|
|
|
|
|
|
|
void lcd_display_int(int16_t var, uint8_t size, bool zeros, bool brackets, bool sign) |
|
|
|
|
{ |
|
|
|
|
int16_t tmp = 0; |
|
|
|
|
uint16_t p; |
|
|
|
|
bool non_zero_found = false; |
|
|
|
|
|
|
|
|
|
if (size < 1) |
|
|
|
|
return; |
|
|
|
|
lcd_display_float(float(var), size, 0, zeros, brackets, sign); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (brackets == true) |
|
|
|
|
lcd.print(F("[")); |
|
|
|
|
void lcd_display_float(float var, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign) |
|
|
|
|
{ |
|
|
|
|
char s[LCD_cols + 1]; |
|
|
|
|
char f[LCD_cols + 1]; |
|
|
|
|
|
|
|
|
|
if (sign == true) |
|
|
|
|
if (size_fraction > 0) |
|
|
|
|
{ |
|
|
|
|
size++; |
|
|
|
|
if (var < 0) |
|
|
|
|
{ |
|
|
|
|
lcd.print(F("-")); |
|
|
|
|
var = abs(var); |
|
|
|
|
} |
|
|
|
|
else if (var > 0) |
|
|
|
|
lcd.print(F("+")); |
|
|
|
|
else |
|
|
|
|
lcd.print(F(" ")); |
|
|
|
|
} |
|
|
|
|
if (zeros == true && sign == true) |
|
|
|
|
sprintf(f, "%%+%0d.%df", size_number + size_fraction + 1, size_fraction); |
|
|
|
|
else if (zeros == true && sign == true) |
|
|
|
|
sprintf(f, "%%+%0d.%df", size_number + size_fraction + 1, size_fraction); |
|
|
|
|
else if (zeros == false && sign == true) |
|
|
|
|
sprintf(f, "%%+%d.%df", size_number + size_fraction + 1, size_fraction); |
|
|
|
|
else if (zeros == false && sign == false) |
|
|
|
|
sprintf(f, "%%%d.%df", size_number + size_fraction + 1, size_fraction); |
|
|
|
|
|
|
|
|
|
if (var == 0 && zeros == false) |
|
|
|
|
{ |
|
|
|
|
for (int8_t i = size - 1 ; i > 0; i--) |
|
|
|
|
lcd.print(F(" ")); |
|
|
|
|
lcd.print(F("0")); |
|
|
|
|
sprintf(s, f, var); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
for (int8_t i = size - 1 ; i >= 0; i--) |
|
|
|
|
{ |
|
|
|
|
p = int(pow(10, i)); |
|
|
|
|
tmp = int(var / p); |
|
|
|
|
if (zeros == true && sign == true) |
|
|
|
|
sprintf(f, "%%+0%dd", size_number + 1); |
|
|
|
|
else if (zeros == true && sign == false) |
|
|
|
|
sprintf(f, "%%%0dd", size_number); |
|
|
|
|
else if (zeros == false && sign == true) |
|
|
|
|
sprintf(f, "%%+%dd", size_number + 1); |
|
|
|
|
else if (zeros == false && sign == false) |
|
|
|
|
sprintf(f, "%%%dd", size_number); |
|
|
|
|
|
|
|
|
|
if (tmp == 0) |
|
|
|
|
{ |
|
|
|
|
if (zeros == true) |
|
|
|
|
lcd.print(F("0")); |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if (non_zero_found == true) |
|
|
|
|
lcd.print(F("0")); |
|
|
|
|
else |
|
|
|
|
lcd.print(F(" ")); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
non_zero_found = true; |
|
|
|
|
lcd.print(tmp); |
|
|
|
|
} |
|
|
|
|
var -= (tmp * p); |
|
|
|
|
} |
|
|
|
|
sprintf(s, f, int(var)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (brackets == true) |
|
|
|
|
lcd.print(F("]")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void lcd_display_float(float var, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign) |
|
|
|
|
{ |
|
|
|
|
float fraction; |
|
|
|
|
float number; |
|
|
|
|
|
|
|
|
|
if (size_number < 1 || size_fraction < 1) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
fraction = modff(var, &number); |
|
|
|
|
|
|
|
|
|
if (brackets == true) |
|
|
|
|
lcd.print(F("[")); |
|
|
|
|
|
|
|
|
|
if (int(number) == 0) |
|
|
|
|
{ |
|
|
|
|
if (zeros == true) |
|
|
|
|
lcd.print(F("00")); |
|
|
|
|
else |
|
|
|
|
lcd.print(F(" 0")); |
|
|
|
|
char tmp[LCD_cols + 1]; |
|
|
|
|
|
|
|
|
|
strcpy(tmp, s); |
|
|
|
|
sprintf(s, "[%s]", tmp); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
lcd_display_int(int(number), size_number, zeros, false, sign); |
|
|
|
|
lcd.print(F(".")); |
|
|
|
|
lcd_display_int(round(fraction * pow(10, size_fraction)), size_fraction, true, false, false); |
|
|
|
|
|
|
|
|
|
if (brackets == true) |
|
|
|
|
lcd.print(F("]")); |
|
|
|
|
lcd.print(s); |
|
|
|
|
Serial.println(f); |
|
|
|
|
Serial.println(s); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inline void lcd_display_bar_int(const char* title, uint32_t value, float factor, uint32_t min_value, uint32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init) |
|
|
|
|
{ |
|
|
|
|
lcd_display_bar_float(title, float(value), factor, min_value, max_value, size, 0, zeros, brackets, sign, init); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void lcd_display_bar_int(const char* title, uint32_t value, float factor, uint32_t min_value, uint32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init) |
|
|
|
|
void lcd_display_bar_float(const char* title, float value, float factor, uint32_t min_value, uint32_t max_value, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign, bool init) |
|
|
|
|
{ |
|
|
|
|
float _v = float((value - min_value) * LCD_cols) / (max_value - min_value); |
|
|
|
|
float _vi = 0.0; |
|
|
|
|
uint8_t vf = uint8_t(modff(_v, &_vi) * 10.0 + 0.5); |
|
|
|
|
uint8_t vi = uint8_t(_vi + 0.5); |
|
|
|
|
uint8_t size = 0; |
|
|
|
|
|
|
|
|
|
if (size_fraction == 0) |
|
|
|
|
size = size_number; |
|
|
|
|
else |
|
|
|
|
size = size_number + size_fraction + 1; |
|
|
|
|
|
|
|
|
|
if (init == true) |
|
|
|
|
{ |
|
|
|
|
// show initial title, value and bar
|
|
|
|
|
LCDML.DISP_clear(); |
|
|
|
|
lcd.show(0, 0, LCD_cols - 1, title); |
|
|
|
|
lcd.setCursor(LCD_cols - (size + 1) + 1, 0); |
|
|
|
|
lcd_display_int(uint16_t(float(value)*factor + 0.5), size, zeros, brackets, sign); |
|
|
|
|
lcd.setCursor(LCD_cols - size, 0); |
|
|
|
|
lcd_display_float(value * factor, size_number, size_fraction, zeros, brackets, sign); |
|
|
|
|
lcd.setCursor(0, 1); |
|
|
|
|
|
|
|
|
|
if (vi == 0 && uint8_t(vf / 2) == 0) |
|
|
|
@ -3323,8 +3297,8 @@ void lcd_display_bar_int(const char* title, uint32_t value, float factor, uint32 |
|
|
|
|
// show only changed value and changed part of the bar
|
|
|
|
|
uint8_t ca = uint8_t (float(LCD_cols - 1) / float(max_value)) + 1; |
|
|
|
|
|
|
|
|
|
lcd.setCursor(LCD_cols - (size + 1) + 1, 0); |
|
|
|
|
lcd_display_int(uint16_t(float(value)*factor + 0.5), size, zeros, brackets, sign); |
|
|
|
|
lcd.setCursor(LCD_cols - size, 0); |
|
|
|
|
lcd_display_float(value * factor, size_number, size_fraction, zeros, brackets, sign); |
|
|
|
|
|
|
|
|
|
if (vi == 0 && uint8_t(vf / 2) == 0) |
|
|
|
|
{ |
|
|
|
|