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)