From 643cc34acd2caa2c0ce09a66877b98cdf17f17f4 Mon Sep 17 00:00:00 2001 From: Holger Wirtz Date: Fri, 27 Mar 2020 17:42:00 +0100 Subject: [PATCH] Optimized meter bar function. --- UI.hpp | 172 ++++++++------------------------------------------------- 1 file changed, 22 insertions(+), 150 deletions(-) diff --git a/UI.hpp b/UI.hpp index 01fc3d6..f37e580 100644 --- a/UI.hpp +++ b/UI.hpp @@ -221,8 +221,6 @@ void lcd_display_float(float var, uint8_t size_number, uint8_t size_fraction, bo void lcd_display_bar_int(const char* title, uint32_t value, float factor, int32_t min_value, int32_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, int32_t min_value, int32_t max_value, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign, bool init); void lcd_display_meter_float(const char* title, float value, float factor, int32_t min_value, int32_t max_value, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign, bool init); -void lcd_display_bar_int_N(const char* title, uint32_t value, float diff, float factor, int32_t min_value, int32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init); -void lcd_display_bar_float_N(const char* title, float value, float diff, float factor, int32_t min_value, int32_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 @@ -979,7 +977,7 @@ void UI_func_chorus_frequency(uint8_t param) { // setup function lcd_special_chars(BLOCKBAR); - lcd_display_bar_float_N("Chorus Frq.", configuration.chorus_frequency, float(ENCODER[ENC_R].speed()), 0.1, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 2, 1, false, false, false, true); + lcd_display_bar_float("Chorus Frq.", configuration.chorus_frequency, 0.1, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 2, 1, false, false, false, true); } if (LCDML.FUNC_loop()) // ****** LOOP ********* @@ -995,13 +993,9 @@ void UI_func_chorus_frequency(uint8_t param) else if (LCDML.BT_checkUp()) configuration.chorus_frequency = constrain(configuration.chorus_frequency - ENCODER[ENC_R].speed(), CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX); - chorus_modulator.frequency(configuration.chorus_frequency / 10.0); - - lcd_display_bar_float_N("Chorus Frq.", configuration.chorus_frequency, float(ENCODER[ENC_R].speed()), 0.1, CHORUS_FREQUENCY_MIN, CHORUS_FREQUENCY_MAX, 2, 1, false, false, false, false); + 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"));*/ + chorus_modulator.frequency(configuration.chorus_frequency / 10.0); } } @@ -3257,106 +3251,12 @@ inline void lcd_display_bar_int(const char* title, uint32_t value, float factor, void lcd_display_bar_float(const char* title, float value, float factor, int32_t min_value, int32_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 (brackets == true) - size += 2; - - 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, 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) - { - lcd.setCursor(0, 1); - lcd.write((uint8_t)0); // minimal block - } - else - { - for (uint8_t i = 0; i < LCD_cols; i++) - { - if (i <= vi) - lcd.write((uint8_t)4); // full block - else - lcd.print(F(" ")); - } - - if (vf > 1) - { - lcd.setCursor(vi , 1); - lcd.write((uint8_t)int(vf / 2) - 1); - } - } - } - else - { - // 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, 0); - lcd_display_float(value * factor, size_number, size_fraction, zeros, brackets, sign); - - if (vi == 0 && uint8_t(vf / 2) == 0) - { - lcd.setCursor(0, 1); - lcd.write((uint8_t)0); // minimal block - for (uint8_t n = 1; n <= ca; n++) - lcd.print(F(" ")); - } - else if (vi == LCD_cols - 1 && uint8_t(vf / 2) == 0) - { - lcd.setCursor(LCD_cols - 1 - ca, 1); - for (uint8_t n = LCD_cols - 1 - ca; n < LCD_cols; n++) - lcd.write((uint8_t)4); // full block - } - else - { - uint8_t b = max(0, vi - ca); - uint8_t e = min(LCD_cols - 1, vi + ca); - - for (uint8_t n = b; n <= e; n++) - { - lcd.setCursor(n, 1); - if (n < vi) - lcd.write((uint8_t)4); // full block - else if (n == vi && uint8_t(vf / 2) != 0) - lcd.write(uint8_t(vf / 2) - 1); - else - lcd.print(F(" ")); - } - } - } -} -inline void lcd_display_bar_int_N(const char* title, uint32_t value, int16_t diff, float factor, int32_t min_value, int32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init) -{ - lcd_display_bar_float_N(title, float(value), float(diff), factor, min_value, max_value, size, 0, zeros, brackets, sign, init); -} - -void lcd_display_bar_float_N(const char* title, float value, float diff, float factor, int32_t min_value, int32_t max_value, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign, bool init) -{ uint8_t size = 0; - float value_old = value + diff; 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); - float v_o = float((value - min_value) * LCD_cols) / (max_value - min_value); - uint8_t vf_o = uint8_t(modff(v, &_vi) * 10.0 + 0.5); - uint8_t vi_o = uint8_t(_vi); if (size_fraction == 0) size = size_number; @@ -3374,7 +3274,7 @@ void lcd_display_bar_float_N(const char* title, float value, float diff, float f lcd.setCursor(0, 0); lcd.print(title); - // Value + // Value-Brackets if (brackets == true) { lcd.setCursor(LCD_cols - size, 0); @@ -3382,57 +3282,29 @@ void lcd_display_bar_float_N(const char* title, float value, float diff, float f lcd.setCursor(LCD_cols - 1, 0); lcd.print(F("]")); } - lcd.setCursor(LCD_cols - size, 0); - lcd_display_float(value * factor, size_number, size_fraction, zeros, brackets, sign); + } - // Bar - lcd.setCursor(0, 1); - if (vi == 0) - lcd.write((uint8_t)vf / 2.0); - else - { - for (uint8_t i = 0; i < vi; i++) - lcd.write((uint8_t)4); // full block - if (vi < LCD_cols) - lcd.write((uint8_t)vf / 2.0); - } + // Value + lcd.setCursor(LCD_cols - size, 0); + lcd_display_float(value * factor, size_number, size_fraction, zeros, brackets, sign); + + // Bar + lcd.setCursor(0, 1); + + if (vi == 0) + { + lcd.write((uint8_t)vf / 2.0 - 0.5); + lcd.print(F(" ")); } else { - // Value - lcd.setCursor(LCD_cols - size, 0); - lcd_display_float(value * factor, size_number, size_fraction, zeros, brackets, sign); - - // Bar - lcd.setCursor(0, 1); - if (vi == 0) - { - if (vf / 2.0 == 0) - lcd.write((uint8_t)0); - else - { - lcd.write((uint8_t)vf / 2.0); - for (uint8_t i = vi; i < LCD_cols; i++) - lcd.print(F(" ")); // empty block - } - } - else - { - for (uint8_t i = 0; i < vi; i++) - lcd.write((uint8_t)4); // full block - if (vi < LCD_cols) - lcd.write((uint8_t)vf / 2.0); - if (vi < LCD_cols - 1) - for (uint8_t i = vi; i < LCD_cols; i++) - lcd.print(F(" ")); // empty block - } + for (uint8_t i = 0; i < vi; i++) + lcd.write((uint8_t)4); // full block + if (vi < LCD_cols) + lcd.write((uint8_t)vf / 2.0 - 0.5); + for (uint8_t i = LCD_cols - vi; i < LCD_cols; i++) + lcd.print(F(" ")); // empty block } - - /* - lcd.setCursor(n, 1); - lcd.write((uint8_t)0); // minimal block - cd.write((uint8_t)4); // full block - */ } void lcd_display_meter_float(const char* title, float value, float factor, int32_t min_value, int32_t max_value, uint8_t size_number, uint8_t size_fraction, bool zeros, bool brackets, bool sign, bool init)