from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from utime import sleep
import ds1307

# I2C Tanımlaması (ESP32 için varsayılan: GPIO22 - SCL, GPIO21 - SDA)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))

# OLED ekran kurulumu
oled_width = 128
oled_height = 64
oled = SSD1306_I2C(oled_width, oled_height, i2c)

# RTC kurulumu
rtc = ds1307.DS1307(i2c)

# Buton bağlantısı (GPIO 15'e bağlı)
buton = Pin(15, Pin.IN, Pin.PULL_UP)  # Buton için giriş pini, pull-up dirençli

# Menü modunu kontrol etmek için bir flag (işaretçi)
menu_aktif = False

while True:
    try:
        # Butonun durumunu oku (aktif düşük: butona basıldığında LOW olur)
        buton_durumu = buton.value()

        # Butona basıldığında menüyü aktif et veya pasif hale getir
        if buton_durumu == 0:  # Butona basıldığında (LOW)
            sleep(0.2)  # Butonun basılı kalma etkisini önlemek için kısa bir gecikme
            menu_aktif = not menu_aktif  # Menü durumu değiştir

        # Eğer menü aktifse
        if menu_aktif:
            oled.fill(0)  # Ekranı temizle
            oled.text("Menu", 45, 0)  # Ekrana "Menü" yazdır
            oled.show()  # Ekranı güncelle
        else:
            # RTC'den saat ve tarih oku
            datetime = rtc.datetime()
            if len(datetime) == 7:  # 7 elemanlı tuple
                yil, ay, gun, haftagun, saat, dakika, saniye = datetime
            elif len(datetime) == 8:  # 8 elemanlı tuple
                yil, ay, gun, haftagun, saat, dakika, saniye, _ = datetime
            else:
                raise ValueError("RTC'den beklenmedik veri formatı!")

            # OLED ekranı temizle
            oled.fill(0)

            # Ekrana veri yazdır
            oled.text("Merhaba Dunya!", 0, 0)
            oled.text(f"Tarih: {gun:02}/{ay:02}/{yil}", 0, 16)
            oled.text(f"Saat: {saat:02}:{dakika:02}:{saniye:02}", 0, 32)
            oled.show()

        # 1 saniye bekle
        sleep(1)

    except Exception as e:
        print("Hata:", e)
        sleep(1)
GND5VSDASCLSQWRTCDS1307+