from machine import I2C, Pin
from utime import sleep, ticks_us
from pico_i2c_lcd import I2cLcd
red = Pin(16, Pin.OUT)
green = Pin(18, Pin.OUT)
blue = Pin(20, Pin.OUT)
led = Pin(5, Pin.OUT)
buzzer = Pin(6, Pin.OUT)
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
trig = Pin(27, Pin.OUT)
echo = Pin(28, Pin.IN)
def measure_distance():
trig.value(1)
sleep_us(10)
trig.value(0)
while echo.value() == 0:
pass
start_time = ticks_us()
while echo.value() == 1:
pass
end_time = ticks_us()
elapsed_time = end_time - start_time
distance_cm = (elapsed_time * 0.0343) / 2 # Konversi waktu menjadi jarak (dalam cm)
return distance_cm
while True:
led.toggle()
sleep(0.5)
# Baca jarak dari sensor ultrasonik
distance = measure_distance()
# Tampilkan status di LCD
lcd.move_to(0, 0) # Pindahkan kursor ke posisi awal
if distance < 100: # Jarak kurang dari 100 cm
# Hanya nyalakan LED hijau
red.value(0)
green.value(1)
blue.value(0) # Matikan warna lain
buzzer.value(1) # Hidupkan buzzer
lcd.putstr("Status: ON ") # Tampilkan status ON di LCD
elif 100 <= distance < 200: # Jarak antara 100 cm hingga 200 cm
# Matikan LED dan RGB LED
red.value(0)
green.value(0)
blue.value(0)
buzzer.value(1) # Hidupkan buzzer
lcd.putstr("Status: Blink ") # Tampilkan status Blink di LCD
else: # Jarak lebih dari atau sama dengan 200 cm
# Matikan semua komponen
red.value(0)
green.value(0)
blue.value(0)
buzzer.value(0)
lcd.putstr("Status: OFF ") # Tampilkan status OFF di LCD
# Tampilkan jarak di LCD di baris kedua
lcd.move_to(0, 1) # Pindahkan kursor ke baris kedua
lcd.putstr("Jarak: {:.2f} cm ".format(distance)) # Tampilkan jarak di LCD