#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// -- tvoje custom znaky --
byte bar0[8] = {
B11111,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B11111
};
byte bar1[8] = {
B11111,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111
};
byte bar2[8] = {
B11111,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
B11111
};
byte b2[8] = {
B11111,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11111
};
byte b3[8] = {
B11111,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11111
};
byte b4[8] = {
B11111,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11111
};
void setup() {
lcd.begin(16, 2);
lcd.backlight();
lcd.createChar(0, bar0);
lcd.createChar(1, bar1);
lcd.createChar(2, bar2);
lcd.createChar(3, b2);
lcd.createChar(4, b3);
lcd.createChar(5, b4);
}
void loop() {
for (int i=0 ; i<100; i+=random(1,5)){
drawProgress(i);
delay(random(500,1000));
}
delay(2000);
lcd.clear();
}
// --------------------------------------------------
void drawProgress(int p) {
if (p < 0) p = 0;
if (p > 100) p = 100;
// 10 buněk, ale výplň má 5 úrovní
// 1 buňka = 10 %
// 1 krok uvnitř buňky = 10% / 5 = 2%
int totalSteps = (p * 5) / 10; // rozsah 0–50
int fullCells = totalSteps / 5; // kolik buněk je plně
int partial = totalSteps % 5; // úroveň výplně 0–4
lcd.setCursor(0, 0);
for (int pos = 0; pos < 10; pos++) {
// --- RÁM ---
if (pos == 0) {
lcd.write(byte(0)); // levý okraj
continue;
}
if (pos == 9) {
lcd.write(byte(2)); // pravý okraj
continue;
}
int cell = pos - 1; // reálný index buňky 0–7
// --- PLNÁ BUŇKA ---
if (cell < fullCells) {
lcd.write(255);
continue;
}
// --- ČÁSTEČNĚ PLNÁ ---
if (cell == fullCells && partial > 0) {
switch (partial) {
case 1: lcd.write(byte(0)); break; // bar0
case 2: lcd.write(byte(3)); break; // b2
case 3: lcd.write(byte(4)); break; // b3
case 4: lcd.write(byte(5)); break; // b4
case 5: lcd.write(255); break; // plný
}
continue;
}
// --- PRÁZDNÁ BUŇKA ---
lcd.write(byte(1)); // bar1
}
// --- Procenta ---
lcd.setCursor(11, 0);
if (p < 10) lcd.print(" ");
lcd.print(p);
lcd.print("%");
}