#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Assuming I2C address 0x27 for LCD
int batteryRemaining = 100; //%
byte batteryTop1[] = {B11110, B11111, B11111, B11111, B11111, B11111, B11111, B11110};
byte batteryTop2[] = {B11110, B11011, B11001, B11001, B11001, B11001, B11011, B11110};
byte batteryTop3[] = {B11110, B00011, B00001, B00001, B00001, B00001, B00011, B11110};
byte batteryMid1[] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111};
byte batteryMid2[] = {B11111, B11100, B11100, B11100, B11100, B11100, B11100, B11111};
byte batteryMid3[] = {B11111, B10000, B10000, B10000, B10000, B10000, B10000, B11111};
byte batteryMid4[] = {B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111};
int serialData;
int batteryPercentage = 100;
void setup() {
Serial.begin(9600); // open serial port, set data rate to 9600 bps
Serial.println("Serial Initialized");
lcd.begin(16, 2);
lcd.clear();
lcd.createChar(0, batteryTop1); // ||||>
lcd.createChar(1, batteryTop2); // || >
lcd.createChar(2, batteryTop3); // >
lcd.createChar(3, batteryMid1); // |||||
lcd.createChar(4, batteryMid2); // |||
lcd.createChar(5, batteryMid3); // |
lcd.createChar(6, batteryMid4); //
}
void loop() {
if (Serial.available() > 0) { // some data is available in the serial buffer
serialData = Serial.parseInt(); // read the integer value from the buffer
if (serialData != 0) {
batteryPercentage = serialData;
Serial.print("Entered: ");
Serial.println(serialData); // send the same value back using the serial port
}
}
switch (batteryPercentage) {
case 100:
// Display 100% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(0));
lcd.setCursor(14, 0);
lcd.write(byte(3));
lcd.setCursor(13, 0);
lcd.write(byte(3));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 90:
// Display 90% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(1));
lcd.setCursor(14, 0);
lcd.write(byte(3));
lcd.setCursor(13, 0);
lcd.write(byte(3));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 80:
// Display 80% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(3));
lcd.setCursor(13, 0);
lcd.write(byte(3));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 70:
// Display 70% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(4));
lcd.setCursor(13, 0);
lcd.write(byte(3));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 60:
// Display 60% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(5));
lcd.setCursor(13, 0);
lcd.write(byte(3));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 50:
// Display 50% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(6));
lcd.setCursor(13, 0);
lcd.write(byte(3));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 40:
// Display 40% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(6));
lcd.setCursor(13, 0);
lcd.write(byte(4));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 30:
// Display 30% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(6));
lcd.setCursor(13, 0);
lcd.write(byte(5));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 20:
// Display 20% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(6));
lcd.setCursor(13, 0);
lcd.write(byte(6));
lcd.setCursor(12, 0);
lcd.write(byte(3));
break;
case 10:
// Display 10% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(6));
lcd.setCursor(13, 0);
lcd.write(byte(6));
lcd.setCursor(12, 0);
lcd.write(byte(4));
break;
case 1:
// Display 0% on LCD
lcd.setCursor(15, 0);
lcd.write(byte(2));
lcd.setCursor(14, 0);
lcd.write(byte(6));
lcd.setCursor(13, 0);
lcd.write(byte(6));
lcd.setCursor(12, 0);
lcd.write(byte(5));
break;
}
}