#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Alamat I2C LCD
#define I2C_ADDR    0x27

// Ukuran LCD
#define LCD_COLUMNS 20
#define LCD_ROWS    4

LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_ROWS);

void setup() {
  // Inisialisasi LCD
  lcd.init();
  lcd.backlight();
}

void loop() {
  // Pesan yang akan ditampilkan
  String message = "surabaya hebat martabat.";
  
  // Bagi pesan menjadi empat bagian
  String part1 = message.substring(0, 21);   // 1 kolom
  String part2 = message.substring(5, 21);  // 2 kolom
  String part3 = message.substring(13, 21); // 3 kolom
  String part4 = message.substring(21);     // 4 kolom
  
  // Loop untuk menggeser setiap bagian ke kiri secara bergantian pada setiap kolom
  for (int i = 0; i < message.length() + 1; i++) {
    // Bersihkan layar
    lcd.clear();
    
    // Tampilkan setiap bagian pada kolom yang sesuai
    lcd.setCursor(0, 0);
    lcd.print(part1.substring(i % part1.length()));
    
    lcd.setCursor(0, 1);
    lcd.print(part2.substring(i % part2.length()));
    
    lcd.setCursor(0, 2);
    lcd.print(part3.substring(i % part3.length()));
    
    lcd.setCursor(0, 3);
    lcd.print(part4.substring(i % part4.length()));
    
    // Delay untuk efek running text
    delay(200);
  }
}
Loading
esp32-devkit-v1