from machine import Pin, I2C, ADC,PWM
from pico_i2c_lcd import I2cLcd
from utime import sleep
#I2C LCD 초기화
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000) # I2C 인터페이스 설정
lcd = I2cLcd(i2c, 0x27, 2, 16) # I2C LCD 초기화
# GPIO 핀 설정
red = Pin(20, Pin.OUT) # 빨간색 LED를 제어하는 핀 설정
green = Pin(19, Pin.OUT) # 녹색 LED를 제어하는 핀 설정
blue = Pin(18, Pin.OUT) # 파란색 LED를 제어하는 핀 설정
analogInput = ADC(Pin(26))
buzzer_pin = PWM(Pin(16))
# def vinlcd():
# lcd.move_to(1, 0)
# lcd.putstr("Voltage Meter") # 첫 번째 행에 텍스트 출력
# lcd.move_to(1, 1)
# lcd.putstr("Vin = {:.2f}".format(vout)) # 첫 번째 행에 전압 값을 포함하여 출력
# lcd.putstr("[V]") # 첫 번째 행에 단위 출력
# sleep(1) # 1초 동안 대기
# lcd.clear() # LCD 화면 지우기
# # 시리얼 모니터에 전압 값 출력
# print("Voltage: {:.2f} V".format(vout)) # 시리얼 모니터에 전압 값 출력
# return vinlcd
while True:
value = analogInput.read_u16() # 아날로그 값 읽기
vout = (value * 3.3) / 65535.0 # 아날로그 값을 전압으로 변환
if vout > 3:
red.value(1) # 거리가 200보다 크면 빨간색 LED 켜기
green.value(0) # 거리가 200보다 크면 녹색 LED 켜기
blue.value(1) # 거리가 200보다 크면 파란색 LED 끄기
print("Voltage: {:.2f} V".format(vout)) # 시리얼 모니터에 전압 값 출력
# vinlcd()
elif vout > 2:
red.value(0) # 거리가 100보다 크면 빨간색 LED 켜기
green.value(0) # 거리가 100보다 크면 녹색 LED 끄기
blue.value(1) # 거리가 100보다 크면 파란색 LED 켜기
print("Voltage: {:.2f} V".format(vout)) # 시리얼 모니터에 전압 값 출력
else:
red.value(0) # 거리가 50 이하면 빨간색 LED 켜기
green.value(1) # 거리가 50 이하면 녹색 LED 켜기
blue.value(1) # 거리가 50 이하면 파란색 LED 켜기
# lcd.move_to(2, 0)
# lcd.putstr("Low Battery") # 첫 번째 행에 텍스트 출력
# lcd.move_to(0, 1)
# lcd.putstr("Change battery") # 첫 번째 행에 텍스트 출력
buzzer_pin.freq(500)
buzzer_pin.duty_u16(1000)
sleep(1)
buzzer_pin.duty_u16(0)
# lcd.clear() # LCD 화면 지우기
print("Voltage: {:.2f} V".format(vout))