import machine
import utime
import ustruct
from ssd1306 import SSD1306_I2C
# === OLED Display ===
i2c = machine.I2C(0, scl=machine.Pin(1), sda=machine.Pin(0))
oled = SSD1306_I2C(128, 64, i2c)
# === SPI Setup (Receiver) ===
spi = machine.SPI(0, baudrate=1000000, polarity=0, phase=0)
cs = machine.Pin(17, machine.Pin.OUT)
cs.value(1)
# === Aktuator ===
relay = machine.Pin(18, machine.Pin.OUT)
led = machine.Pin(19, machine.Pin.OUT)
def update_display(suhu, rh, lux, gerak):
    oled.fill(0)
    oled.text("Suhu: {:.1f} C".format(suhu), 0, 0)
    oled.text("RH: {:.1f}%".format(rh), 0, 10)
    oled.text("Lux: {:.1f}".format(lux), 0, 20)
    oled.text("Gerak: {}".format("Ada" if gerak else "Tidak"), 0, 30)
    oled.show()
while True:
    cs.value(0)
    data = spi.read(16)  # 4 float (16 bytes)
    cs.value(1)
    if data:
        suhu, rh, lux, gerak = ustruct.unpack('ffff', data)
        update_display(suhu, rh, lux, gerak)
        led.value(1 if gerak else 0)
        # === Logika kontrol aktuator ===
        if suhu < 26 and rh > 90:
            relay.value(1)  # Nyalakan pemanas
        elif suhu > 30 and rh < 75:
            relay.value(0)  # Matikan (anggap kipas otomatis)
        elif lux < 50 and suhu < 30:
            relay.value(1)  # Tambahan pemanas saat gelap
        else:
            relay.value(0)
        print("RX -> Suhu: {:.1f} | RH: {:.1f} | Lux: {:.1f} | Gerak: {}".format(
            suhu, rh, lux, "Ada" if gerak else "Tidak"))
    utime.sleep(2)