|
|
@ -3375,15 +3375,20 @@ 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, uint32_t min_value, uint32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init) |
|
|
|
void lcd_display_bar_int(const char* title, uint32_t value, uint32_t min_value, uint32_t max_value, uint8_t size, bool zeros, bool brackets, bool sign, bool init) |
|
|
|
{ |
|
|
|
{ |
|
|
|
float _v = float(value * LCD_cols) / (max_value - min_value); |
|
|
|
float _v = float(value * LCD_cols) / (max_value - min_value); |
|
|
|
float _vi; |
|
|
|
float _vi = 0.0; |
|
|
|
uint8_t vf = uint8_t(modff(_v, &_vi) * 10.0 + 0.5); |
|
|
|
uint8_t vf = uint8_t(modff(_v, &_vi) * 10.0 + 0.5); |
|
|
|
uint8_t vi = uint8_t(_vi); |
|
|
|
uint8_t vi = uint8_t(_vi + 0.5); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Serial.println(value, DEC); |
|
|
|
|
|
|
|
Serial.println(_v, 5); |
|
|
|
|
|
|
|
Serial.println(vf, DEC); |
|
|
|
|
|
|
|
Serial.println(vi, DEC); |
|
|
|
|
|
|
|
|
|
|
|
if (init == true) |
|
|
|
if (init == true) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// show initial title, value and bar
|
|
|
|
// show initial title, value and bar
|
|
|
|
lcd.clear(); |
|
|
|
lcd.clear(); |
|
|
|
lcd.show(0, 0, LCD_cols, title); |
|
|
|
lcd.show(0, 0, LCD_cols - 1, title); |
|
|
|
lcd.setCursor(LCD_cols - (size + 1) + 1, 0); |
|
|
|
lcd.setCursor(LCD_cols - (size + 1) + 1, 0); |
|
|
|
lcd_display_int(value, size, zeros, brackets, sign); |
|
|
|
lcd_display_int(value, size, zeros, brackets, sign); |
|
|
|
lcd.setCursor(0, 1); |
|
|
|
lcd.setCursor(0, 1); |
|
|
@ -3413,7 +3418,7 @@ void lcd_display_bar_int(const char* title, uint32_t value, uint32_t min_value, |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
// show only changed value and changed part of the bar
|
|
|
|
// show only changed value and changed part of the bar
|
|
|
|
uint8_t ca = max((float((LCD_cols) / float(max_value - min_value)) + 0.5), 1); |
|
|
|
uint8_t ca = float(LCD_cols - 1) / float(max_value - min_value) + 1; |
|
|
|
|
|
|
|
|
|
|
|
lcd.setCursor(LCD_cols - (size + 1) + 1, 0); |
|
|
|
lcd.setCursor(LCD_cols - (size + 1) + 1, 0); |
|
|
|
lcd_display_int(value, size, zeros, brackets, sign); |
|
|
|
lcd_display_int(value, size, zeros, brackets, sign); |
|
|
@ -3433,14 +3438,12 @@ void lcd_display_bar_int(const char* title, uint32_t value, uint32_t min_value, |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
uint8_t b, e; |
|
|
|
uint8_t b = max(0, vi - ca); |
|
|
|
|
|
|
|
uint8_t e = min(LCD_cols - 1, vi + ca); |
|
|
|
b = max(0, vi - ca); |
|
|
|
|
|
|
|
e = min(LCD_cols - 1, vi + ca); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lcd.setCursor(b, 1); |
|
|
|
|
|
|
|
for (uint8_t n = b; n <= e; n++) |
|
|
|
for (uint8_t n = b; n <= e; n++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
lcd.setCursor(n, 1); |
|
|
|
if (n < vi) |
|
|
|
if (n < vi) |
|
|
|
lcd.write((uint8_t)4); // full block
|
|
|
|
lcd.write((uint8_t)4); // full block
|
|
|
|
else if (n == vi && uint8_t(vf / 2) != 0) |
|
|
|
else if (n == vi && uint8_t(vf / 2) != 0) |
|
|
|