# main.py
import machine
import time
from hx711 import HX711
from ssd1306 import SSD1306_I2C
from ds1307 import DS1307
# === Inisialisasi I2C untuk OLED & RTC ===
i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
rtc = DS1307(i2c)
# (Opsional) Set waktu RTC sekali: uncomment dan sesuaikan
# dt = (2025, 5, 31, 6, 12, 0, 0, 0)
# rtc.datetime(dt)
# === Inisialisasi HX711 ===
hx = HX711(dout=machine.Pin(18), pd_sck=machine.Pin(19))
hx.set_scale(2280) # skala kalibrasi, sesuaikan
hx.tare()
target_grams = 250
# === Inisialisasi Buzzer & LED ===
buzzer = machine.Pin(14, machine.Pin.OUT)
buzzer.off()
led1 = machine.Pin(33, machine.Pin.OUT)
led2 = machine.Pin(32, machine.Pin.OUT)
# Fungsi beep dan flash_led
def beep(count=1):
for _ in range(count):
buzzer.on()
time.sleep(0.1)
buzzer.off()
time.sleep(0.1)
def flash_led(pin, times=3, delay=0.2):
for _ in range(times):
pin.on()
time.sleep(delay)
pin.off()
time.sleep(delay)
# === Loop Utama ===
while True:
# Baca berat (g)
weight = max(0, int(hx.get_units(5)))
# Ambil waktu dari RTC
y, mo, d, wd, h, mi, s, _ = rtc.datetime()
ts = "{:02d}:{:02d}:{:02d}".format(h, mi, s)
# Gambar di OLED
oled.fill(0)
oled.text("Timbang Gelas", 0, 0)
oled.text(ts, 80, 0)
oled.text("Berat: {} g".format(weight), 0, 20)
if weight == 0:
# Standby: LED biru pelan berkedip
led1.on()
led2.on()
time.sleep(0.5)
led1.off()
led2.off()
elif weight >= target_grams:
# Target tercapai
oled.text("minum woii!", 0, 40)
beep(2)
flash_led(led1, 4)
flash_led(led2, 4)
# Tampilkan OLED setiap loop
oled.show()
time.sleep(0.2)