#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
// Karakter baris atas
byte topChars[2][3][8] = {
{ // Baris atas 1
{ B11111, B11111, B11100, B11011, B11011, B10111, B10111, B10110 },
{ B11000, B00111, B11111, B11000, B11010, B11010, B00010, B11110 },
{ B00000, B11111, B11111, B10001, B10101, B10001, B11111, B10001 }
},
{ // Baris atas 2
{ B00000, B11111, B11111, B00011, B01011, B01011, B01000, B01111 },
{ B00011, B11100, B11111, B11000, B11010, B11000, B11111, B01000 },
{ B11111, B11111, B00111, B11011, B11011, B11101, B11101, B11101 }
}
};
// Karakter baris bawah
byte bottomChars[2][3][8] = {
{ // Baris bawah 1
{ B10110, B10110, B10110, B11011, B11011, B11100, B11111, B11111 },
{ B10010, B10010, B11110, B00001, B11111, B11111, B00111, B11000 },
{ B10101, B10101, B10101, B10001, B11111, B11111, B11111, B00000 }
},
{ // Baris bawah 2
{ B01001, B01001, B01111, B10000, B11111, B11111, B11111, B00000 },
{ B01010, B01010, B01010, B11000, B11111, B11111, B11100, B00011 },
{ B11101, B11101, B11101, B11011, B11011, B00111, B11111, B11111 }
}
};
unsigned long lastSwitch = 0;
bool showFirstSet = true;
unsigned long startTime;
void setup() {
lcd.begin(16, 2);
unsigned long startTime = millis();
bool state = true;
while (millis() - startTime < 5000) {
showFirstSet = state;
displayCharacters();
delay(200); // Tampilkan selama 1 detik
state = !state; // Ganti tampilan
}
}
void loop() {
if (millis() - lastSwitch >= 100) {
showFirstSet = !showFirstSet;
lastSwitch = millis();
displayCharacters();
}
}
void displayCharacters() {
int setIndex = showFirstSet ? 0 : 1;
// Buat karakter atas (slot 0–2)
for (int i = 0; i < 3; i++) {
lcd.createChar(i, topChars[setIndex][i]);
}
// Buat karakter bawah (slot 3–5)
for (int i = 0; i < 3; i++) {
lcd.createChar(i + 3, bottomChars[setIndex][i]);
}
int colStart = showFirstSet ? 0 : 3; // kolom awal penulisan (ubah ke 4)
// Hapus karakter sebelumnya di kolom yang tidak digunakan saat ini
int clearStart = showFirstSet ? 3 : 0; // lokasi yang akan dibersihkan
for (int row = 0; row < 2; row++) {
lcd.setCursor(clearStart, row);
for (int i = 0; i < 3; i++) {
lcd.write(255); // blok penuh
}
}
// Tampilkan baris atas
lcd.setCursor(colStart, 0);
for (int i = 0; i < 3; i++) {
lcd.write(i); // menulis karakter 0–2
}
// Tampilkan baris bawah
lcd.setCursor(colStart, 1);
for (int i = 3; i < 6; i++) {
lcd.write(i); // menulis karakter 3–5
}
// Tambahkan teks "Battery" dan "Monitor" di posisi tetap
lcd.setCursor(7, 0);
lcd.print("Battery");
lcd.setCursor(7, 1);
lcd.print("Monitor");
}