#include "pitches.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
String atas = " SELAMAT PAGI APA KABARMU SEHAT "; // Pesan baris atas
String bawah = "SALSA ANDERIA PN HARI INI? SELALU YA "; // Pesan baris bawah
int x = 0; // Panjang pesan atas
int y = 0; // Panjang pesan bawah
int z = 0; // Panjang maksimum antara pesan atas dan bawah
bool loveMode = false; // Mode mencetak "I LOVE YOU"
int loveRow = 0; // Baris saat ini untuk mencetak "I LOVE YOU"
byte love[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
byte senyum[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b10001,
0b01110,
0b00000,
0b00000
};
void setup() {
lcd.begin(16, 2);
lcd.backlight();
lcd.createChar(0, love);
lcd.createChar(1, senyum);
x = atas.length(); // Inisialisasi panjang pesan atas
y = bawah.length(); // Inisialisasi panjang pesan bawah
z = max(x, y); // Inisialisasi panjang maksimum
}
void loop() {
lcd.clear();
// Loop untuk mencetak pesan atas dan bawah
for (int a = 0; a < z + 16; a++) {
lcd.clear();
if (a < 16) {
if (a < x) {
lcd.setCursor(15 - a, 0);
lcd.print(atas.substring(0, a + 1));
}
if (a < y) {
lcd.setCursor(15 - a, 1);
lcd.print(bawah.substring(0, a + 1));
}
} else {
if (a - 16 < x) {
lcd.setCursor(0, 0);
lcd.print(atas.substring(a - 16, min(a, x)));
}
if (a - 16 < y) {
lcd.setCursor(0, 1);
lcd.print(bawah.substring(a - 16, min(a, y)));
}
}
if ((a == 16) || (a == 32) || (a == z)) {
delay(3000);
} else {
delay(500);
}
}
// Masuk mode mencetak "I LOVE YOU"
loveMode = true;
// Loop untuk mencetak "I LOVE YOU" yang berpindah baris
while (loveMode) {
lcd.clear();
lcd.setCursor(0, loveRow);
lcd.write((byte)0);
lcd.write((byte)0);
lcd.write((byte)0);
lcd.print("I LOVE YOU");
lcd.write((byte)0);
lcd.write((byte)0);
lcd.write((byte)0);
// Berpindah baris
loveRow = (loveRow == 0) ? 1 : 0;
delay(100);
}
}