from machine import Pin, TouchPad, ADC, PWM
import time
# การกำหนดขา GPIO
touch_pin = TouchPad(Pin(4)) # ขา GPIO 4: TouchPad
pot_pin = ADC(Pin(15)) # ขา GPIO 15: Potentiometer (Analog Input)
led = PWM(Pin(16)) # ขา GPIO 16: ใช้ PWM สำหรับควบคุม LED
# การตั้งค่า PWM สำหรับ LED
led.freq(1000) # ตั้งค่าความถี่ PWM เป็น 1kHz
# การตั้งค่า ADC (อ่านค่าจาก Potentiometer)
pot_pin.atten(ADC.ATTN_11DB) # ขยายนช่วงแรงดันให้เป็น 0-3.3V
pot_pin.width(ADC.WIDTH_10BIT) # ตั้งค่าความละเอียด ADC เป็น 10 บิต (0-1023)
# ตัวแปรสำหรับควบคุมสถานะ
led_state = False # สถานะเปิด-ปิด LED (เริ่มต้นปิด)
previous_touch = False # สำหรับติดตามการสัมผัสใหม่
threshold = 100 # เกณฑ์การตรวจจับการสัมผัส
while True:
# อ่านค่าจาก TouchPad
touch_value = touch_pin.read()
print("Touch Value:", touch_value)
# ตรวจสอบว่ามีการสัมผัสหรือไม่
is_touched = touch_value is not None and touch_value < threshold
# Toggle เปิด-ปิด LED เมื่อเกิดสัมผัสใหม่
if is_touched and not previous_touch:
led_state = not led_state
if not led_state:
led.duty(0) # หากปิด LED ตั้งค่า Duty Cycle เป็น 0
print("Toggle LED:", "ON" if led_state else "OFF")
# หาก LED เปิดอยู่ ให้ปรับความสว่างตามค่า Potentiometer
if led_state:
pot_value = pot_pin.read() # อ่านค่า Potentiometer (0-1023)
duty_cycle = int(pot_value * 1023 / 1023) # คำนวน Duty Cycle
led.duty(duty_cycle) # ปรับความสว่าง LED
print("Pot Value:", pot_value, "Duty Cycle:", duty_cycle)
# บันทึกสถานะสัมผัสในรอบนี้
previous_touch = is_touched
# หน่วงเวลาสั้น ๆ เพื่อป้องกันการอ่านค่าซ้ำเร็วเกินไป
time.sleep(0.1)