Optimized meter bar function.

pull/32/head
Holger Wirtz 5 years ago
parent f730e6c0d0
commit 643cc34acd
  1. 172
      UI.hpp

172
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)

Loading…
Cancel
Save