Hallo freunde der Programier Kunst,
Habe eine Progress Bar die Super funktioniert
nur ein Proplem habe Ich. Progress Bar zeigt nur in Prozent an.
Also 0 - 100
Mein Problem ist das ich gerne einen Wert ausgeben möchte der
bis 5000 geht und der dann Prozentual in der Progress Bar angezeigt wirt.
Hier mein Code :
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
const int LCD_NB_ROWS = 4 ;
const int LCD_NB_COLUMNS = 20 ;
byte START_DIV_0_OF_1 [ 8 ] = {
B01111 ,
B11000 ,
B10000 ,
B10000 ,
B10000 ,
B10000 ,
B11000 ,
B01111
}; // Char start 0/1
byte START_DIV_1_OF_1 [ 8 ] = {
B01111 ,
B11000 ,
B10011 ,
B10111 ,
B10111 ,
B10011 ,
B11000 ,
B01111
}; // Tank beginning 1/1
byte DIV_0_OF_2 [ 8 ] = {
B11111 ,
B00000 ,
B00000 ,
B00000 ,
B00000 ,
B00000 ,
B00000 ,
B11111
}; // Medium tank 0/2
byte DIV_1_OF_2 [ 8 ] = {
B11111 ,
B00000 ,
B11000 ,
B11000 ,
B11000 ,
B11000 ,
B00000 ,
B11111
}; // Medium tank 1/2
byte DIV_2_OF_2 [ 8 ] = {
B11111 ,
B00000 ,
B11011 ,
B11011 ,
B11011 ,
B11011 ,
B00000 ,
B11111
}; // Medium tank 2/2
byte END_DIV_0_OF_1 [ 8 ] = {
B11110 ,
B00011 ,
B00001 ,
B00001 ,
B00001 ,
B00001 ,
B00011 ,
B11110
}; // late tank 0/1
byte END_DIV_1_OF_1 [ 8 ] = {
B11110 ,
B00011 ,
B11001 ,
B11101 ,
B11101 ,
B11001 ,
B00011 ,
B11110
}; // Char end 1/1
void setup_progressbar() {
lcd.createChar(0, START_DIV_0_OF_1);
lcd.createChar(1, START_DIV_1_OF_1);
lcd.createChar(2, DIV_0_OF_2);
lcd.createChar(3, DIV_1_OF_2);
lcd.createChar(4, DIV_2_OF_2);
lcd.createChar(5, END_DIV_0_OF_1);
lcd.createChar(6, END_DIV_1_OF_1);
}
void draw_progressbar(byte lcdwert) {
lcd.setCursor(0, 0);
lcd.print(lcdwert);
lcd.print(F(" % "));
lcd.setCursor(0, 1);
byte nb_columns = map(lcdwert, 0, 100, 0, LCD_NB_COLUMNS * 2 - 2);
// Chaque caractére affiche 2 barres verticales, mais le premier et dernier caractére n'en affiche qu'une.
for (byte i = 0; i < LCD_NB_COLUMNS; ++i) {
if (i == 0) { // Premiére case
if (nb_columns > 0) {
lcd.write(1); // Char début 1 / 1
nb_columns -= 1;
} else {
lcd.write((byte) 0); // Char début 0 / 1
}
} else if (i == LCD_NB_COLUMNS -1) { // Derniére case
if (nb_columns > 0) {
lcd.write(6); // Char fin 1 / 1
} else {
lcd.write(5); // Char fin 0 / 1
}
} else { // Autres cases
if (nb_columns >= 2) {
lcd.write(4); // Char div 2 / 2
nb_columns -= 2;
} else if (nb_columns == 1) {
lcd.write(3); // Char div 1 / 2
nb_columns -= 1;
} else {
lcd.write(2); // Char div 0 / 2
}
}
}
}
void setup(){
lcd.begin(LCD_NB_COLUMNS, LCD_NB_ROWS);
setup_progressbar();
lcd.clear();
}
void loop(){
byte lcdwert = 50;
draw_progressbar(lcdwert);
}
Ich hoffe ihr könnt mir Helfen.
Liebe Grüße tsw68