#include <LiquidCrystal_I2C.h>
#define lenght 16.0
double percent=100.0;
unsigned char b;
unsigned int peace;
// Zeichenaufbau für eine vertikale Linie
byte p1[8] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10};
byte p2[8] = {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18};
byte p3[8] = {0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C};
byte p4[8] = {0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E};
byte p5[8] = {0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F};
float targetTime = 5.0; // in Sekunden
float startTime; // in Millisekunden
LiquidCrystal_I2C lcd(0x27,16,2); // 0x27 Adresse für das Display
void setup() {
lcd.init(); // Display initialisieren
lcd.clear(); // Display löschen
lcd.setBacklight(1);
lcd.createChar(0, p1);
lcd.createChar(1, p2);
lcd.createChar(2, p3);
lcd.createChar(3, p4);
lcd.createChar(4, p5);
lcd.clear();
startTime = millis();
}
void loop()
{
Wire.begin(21, 20); // "Umbiegen" der Anschlüsse für SDA und SCL auf Pin 21 und Pin 20
lcd.setCursor(0, 0);
if (((millis()-startTime)/1000) < targetTime) {
// calculate time until reached target
percent = (millis() - startTime)/(1000*targetTime)*100.0;
lcd.print("l\341uft..."); // Darstellung der Umlaute beachten
if (int(targetTime - (millis()-startTime)/1000) > 9) {
lcd.print(int(targetTime - (millis()-startTime)/1000));
lcd.print("s");
}
else {
lcd.print(" ");
lcd.print(int(targetTime - (millis()-startTime)/1000));
lcd.print("s");
}
lcd.setCursor(0,1);
double a=lenght/100*percent;
// drawing black rectangles on LCD
if (a>=1) {
for (int i=1;i<a;i++) {
lcd.write(byte(4));
b=i;
}
a=a-b;
}
peace=a*5;
// Zeichnen der Zeile
switch (peace) {
case 0:
break;
case 1:
lcd.write(byte(0));
break;
case 2:
lcd.write(byte(1));
break;
case 3:
lcd.write(byte(2));
break;
case 4:
lcd.write(byte(3));
break;
}
//Zeile löschen
for (int i =0;i<(lenght-b);i++) {
lcd.print(" ");
}
;
}
else{
lcd.print("Ziel erreicht.");
lcd.setCursor(0, 1);
for (int i=1;i<=16;i++) {
lcd.write(byte(4));
b=i;
}
}
}