import machine
import ssd1306
import time
# กำหนดขา SCL และ SDA ของ I2C SSD1306 OLED display
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)
# กำหนดขา TRIG และ ECHO ของ HC-SR04
trig_pin = machine.Pin(5, machine.Pin.OUT)
echo_pin = machine.Pin(18, machine.Pin.IN)
# กำหนดขา LED
led = machine.Pin(13, machine.Pin.OUT)
# Function สำหรับอ่านระยะทางจาก HC-SR04
def read_distance():
# ส่งสัญญาณ Trigger
trig_pin.value(0)
time.sleep_us(2)
trig_pin.value(1)
time.sleep_us(10)
trig_pin.value(0)
# รอให้ ECHO ส่งกลับมา
while echo_pin.value() == 0:
pulse_start = time.ticks_us()
while echo_pin.value() == 1:
pulse_end = time.ticks_us()
# คำนวณระยะทาง
duration = pulse_end - pulse_start
distance = (duration / 2) / 29.1 # หารด้วย 29.1 เพื่อแปลงเป็นเซนติเมตร
return distance
while True:
try:
# อ่านค่าระยะทางจาก HC-SR04
dist = read_distance()
# ล้างหน้าจอ OLED
oled.fill(0)
# แสดงค่าระยะทางบน OLED
oled.text("Distance:", 0, 0)
oled.text("{:.2f} cm".format(dist), 0, 16)
oled.show()
# ตรวจสอบเงื่อนไขหากระยะทางมากกว่า 10 เซนติเมตร
if dist > 10.0:
# เปิด LED
led.value(1)
else:
# ปิด LED
led.value(0)
# หน่วงเวลาเพื่ออ่านค่า HC-SR04 อีกครั้ง
time.sleep(1)
except Exception as e:
print("Error:", e)
continue