#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128  // Lebar layar OLED
#define SCREEN_HEIGHT 64  // Tinggi layar OLED
#define OLED_RESET -1     // Tidak ada reset pin
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

String text = "Selamat datang di proyek ESP32!";  // Teks yang akan ditampilkan
int16_t textX = SCREEN_WIDTH;  // Posisi awal teks di luar layar
int16_t textSpeed = 5;  // Kecepatan pergerakan teks

void setup() {
  // Inisialisasi layar OLED
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  
  display.clearDisplay();  // Membersihkan layar OLED
  display.setTextSize(5);   // Ukuran teks
  display.setTextColor(SSD1306_WHITE);  // Warna teks
  display.setCursor(0, 0);  // Set posisi kursor
  display.display();  // Menampilkan perubahan ke layar

  delay(2000);  // Menunggu 2 detik
}

void loop() {
  display.clearDisplay();  // Bersihkan layar
  display.setCursor(textX, 28);  // Set posisi teks (berada di tengah vertikal)
  display.print(text);  // Tampilkan teks

  display.display();  // Menampilkan perubahan ke layar

  // Menggerakkan teks ke kiri
  textX -= textSpeed;

  // Reset posisi teks jika sudah keluar layar
  if (textX < -display.width()) {
    textX = SCREEN_WIDTH;
  }

  delay(50);  // Delay untuk mengontrol kecepatan
}