#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD I2C dengan alamat 0x27 dan ukuran 20x4
LiquidCrystal_I2C lcd(0x27, 20, 4);
int typingDelay = 50; // Delay per huruf (ms) - lebih cepat dari 80, ubah ke 30 jika ingin super cepat
int readDelay = 1500; // Delay setelah setiap baris (ms) - 1.5 detik, ubah ke 1000 jika lebih cepat
// Fungsi untuk menampilkan string per huruf (efek typing) di baris tertentu
void typeText(String text, int row) {
lcd.setCursor(0, row); // Set posisi cursor ke baris yang ditentukan
for (int i = 0; i < text.length(); i++) {
lcd.print(text.charAt(i)); // Print satu huruf
delay(typingDelay); // Delay kecil per huruf
}
}
void setup() {
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Hidupkan lampu latar
lcd.clear();
lcd.noBlink();
lcd.noCursor();
// Tampilkan judul (langsung, tanpa typing untuk cepat)
lcd.setCursor(0, 0);
lcd.print("Heat Waves");
lcd.setCursor(0, 1);
lcd.print("Glass Animals");
lcd.setCursor(0, 2);
lcd.print("(Rezzz)");
delay(2000); // Judul lebih cepat: 2 detik saja
lcd.clear();
}
void loop() {
// Baris 1
typeText("You can't fight it,", 0);
delay(readDelay);
// Baris 2
typeText("you can't breathe", 1);
delay(readDelay);
// Baris 3
typeText("You say something", 2);
delay(readDelay);
// Baris 4
typeText("so lovin', but,", 3);
delay(readDelay);
// Baris 5 - Clear dan mulai baris baru di baris 0
lcd.clear();
typeText("Now I gotta let", 0);
delay(readDelay);
// Baris 6
typeText("you go", 1);
delay(readDelay);
// Baris 7
typeText("You'll be better off", 2);
delay(readDelay);
// Baris 8
typeText("in someone new,", 3);
delay(readDelay);
// Baris 9 - Clear
lcd.clear();
typeText("I don't wanna be", 0);
delay(readDelay);
// Baris 10
typeText("alone", 1);
delay(readDelay);
// Baris 11
typeText("You know it hurts", 2);
delay(readDelay);
// Baris 12
typeText("me too", 3);
delay(readDelay);
// Baris 13 - Clear
lcd.clear();
typeText("You look so broken", 0);
delay(readDelay);
// Baris 14
typeText("when you cry", 1);
delay(readDelay);
// Baris 15
typeText("One more and then", 2);
delay(readDelay);
// Baris 16
typeText("I say goodbye", 3);
delay(readDelay);
// Baris 17 - Clear
lcd.clear();
typeText("Sometimes, all I", 0);
delay(readDelay);
// Baris 18
typeText("think about is you", 1);
delay(readDelay);
// Baris 19
typeText("Late nights in the", 2);
delay(readDelay);
// Baris 20
typeText("middle of June", 3);
delay(readDelay);
// Baris 21 - Clear
lcd.clear();
typeText("Heat waves been", 0);
delay(readDelay);
// Baris 22
typeText("fakin' me out", 1);
delay(readDelay);
// Baris 23
typeText("Can't make you", 2);
delay(readDelay);
// Baris 24 - Akhir
typeText("happier now", 3);
delay(3000); // Delay akhir lebih cepat: 3 detik sebelum loop ulang
// Loop akan ulang otomatis ke baris 1
lcd.clear(); // Bersihkan sebelum ulang
}