#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int gauge;
char buffer[40];
byte gauge_left[8] = {B11111, B10000, B10000, B10000, B10000, B10000, B10000, B11111};
byte gauge_center[8] = {B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111};
byte gauge_right[8] = {B11111, B00001, B00001, B00001, B00001, B00001, B00001, B11111};
byte gauge_filled[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111};
void setup()
{
lcd.init();
lcd.backlight();
lcd.createChar(0, gauge_left);
lcd.createChar(1, gauge_center);
lcd.createChar(2, gauge_right);
lcd.createChar(3, gauge_filled);
}
void loop()
{
lcd.setCursor(0,0);
sprintf(buffer,"Progress%3d%%", gauge); //put text to print in buffer. %3d for 3 digit. %% for display % symbol
lcd.print(buffer); //clear 3 digit from screen. Maximum number is 100
float gauge_step = 100./8.0; //calculate value of each block 100/8 = 12.5
for(int i=0; i<8; i++) //loop through each block with current value of gauge
{
if(gauge < gauge_step * i) //1st block max val < 12.5, 2nd block max < 25
{
if(i == 0) //if first block, display left
{
lcd.write(0);
}
else if (i == 7) //if last block, display right
{
lcd.write(2);
}
else
{
lcd.write(1); //display center (empty only top bar and botom bar)
}
}
else
{
lcd.write(3); //display filled
}
}
gauge+=1;
if(gauge >100)
{
gauge = 0;
}
delay(500);
}