from machine import Pin, I2C, ADC, PWM
from time import sleep_ms
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
import dht
sensor = dht.DHT22(Pin(0)) # DHT22 di GP0
l = ADC(28) # LDR di pin ADC GP28
I2C_ADDR = 39 # Alamat I2C LCD
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
i2c = I2C(1, sda=Pin(2), scl=Pin(3), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
servo = PWM(Pin(15)) # Servo di GP15
servo.freq(50)
def set_servo_angle(angle):
duty = int((angle / 180.0) * 5000 + 1000) # Rentang 1000-8000 us
servo.duty_u16(duty)
lcd.backlight_on()
print(i2c.scan()) # Debug
angle = 90 # Awal posisi servo tengah
set_servo_angle(angle)
while True:
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
light = int(100 - (l.read_u16() * 100 / 65536))
lcd.move_to(0, 0)
lcd.putstr("Light:" + str(light) + "% ")
lcd.move_to(0, 1)
lcd.putstr("Hu:" + str(humidity) + " ")
lcd.move_to(8, 1)
lcd.putstr("Te:" + str(temperature) + "C ")
# Tampilkan sudut servo di serial monitor
print("Light:", light, "Humidity:", humidity, "Temp:", temperature, "Angle:", angle)
if light < 40 and angle < 180:
angle += 5 # Geser ke arah lebih terang
elif light > 80 and angle > 0:
angle -= 5 # Geser ke arah sebaliknya
set_servo_angle(angle)
sleep_ms(500)