19/01/2024
ไปเจอ โจทย์ที่น่าสนใจ การใช้ 1 pin input ควบคุม output เลยเอามา แนะนำครับ ด้วย micropython
#แบบง่าย ๆ ไม่คิดมาก
from machine import Pin
import time
# กำหนดพินสำหรับปุ่มกดและพัดลม
button = Pin(2, Pin.IN, Pin.PULL_UP)
fan1 = Pin(3, Pin.OUT)
fan2 = Pin(4, Pin.OUT)
fan3 = Pin(5, Pin.OUT)
# สถานะและตัวนับการกดปุ่ม
button_state = 0
button_press_count = 0
def control_fan(count):
# ปิดทุกพัดลมก่อน
fan1.value(0)
fan2.value(0)
fan3.value(0)
# กำหนดให้พัดลมทำงานตามจำนวนครั้งที่กด
if count == 1:
fan1.value(1)
elif count == 2:
fan2.value(1)
elif count == 3:
fan3.value(1)
# วนลูปตรวจสอบการกดปุ่ม
while True:
# ตรวจจับการกดปุ่ม
if button.value() == 0 and button_state == 0:
button_state = 1
button_press_count += 1
if button_press_count > 3:
button_press_count = 0
control_fan(button_press_count)
time.sleep(0.5) # ป้องกันการกดซ้ำ (debounce)
elif button.value() == 1:
button_state = 0
time.sleep(0.1) # ระยะเวลาในการตรวจจับการกดปุ่ม
#แบบที่ใช้ interupt เทพหน่อย
from machine import Pin, Timer
import time
# Initialize button and fan pins
button = Pin('BUTTON_PIN', Pin.IN, Pin.PULL_UP)
fan_speed_1 = Pin('FAN_SPEED_1_PIN', Pin.OUT)
fan_speed_2 = Pin('FAN_SPEED_2_PIN', Pin.OUT)
fan_speed_3 = Pin('FAN_SPEED_3_PIN', Pin.OUT)
press_count = 0
debounce_time = 200 # time in milliseconds
multi_press_interval = 500 # time in milliseconds
def button_pressed_callback(pin):
global press_count
# Debouncing and counting logic here
# Increase press_count
# If time between presses is greater than multi_press_interval, reset press_count
def fan_control():
global press_count
# Control fan based on press_count
# 1 press - fan_speed_1 on, others off
# 2 presses - fan_speed_2 on, others off
# 3 presses - fan_speed_3 on, others off
# 4 presses - all off
if press_count == 1:
# กำหนดให้พัดลมระดับ 1 ทำงาน
fan_speed_1.value(1)
fan_speed_2.value(0)
fan_speed_3.value(0)
elif press_count == 2:
# กำหนดให้พัดลมระดับ 2 ทำงาน
fan_speed_1.value(0)
fan_speed_2.value(1)
fan_speed_3.value(0)
elif press_count == 3:
# กำหนดให้พัดลมระดับ 3 ทำงาน
fan_speed_1.value(0)
fan_speed_2.value(0)
fan_speed_3.value(1)
elif press_count >= 4:
# ปิดพัดลมทุกระดับ
fan_speed_1.value(0)
fan_speed_2.value(0)
fan_speed_3.value(0)
press_count = 0 # รีเซ็ตนับการกดปุ่ม
# Set up interrupt for the button
button.irq(trigger=Pin.IRQ_FALLING, handler=button_pressed_callback)
# Main loop
while True:
fan_control()
# Implement a mechanism to reset press_count after a period of inactivity
time.sleep(0.1)
ในที่นี้, value(1) และ value(0) ใช้เพื่อเปิดและปิดสัญญาณ output ไปยังพัดลม ซึ่งเชื่อมต่อกับ GPIO pins ที่กำหนด การเปลี่ยนแปลงของ press_count จะเป็นตัวกำหนดว่าพัดลมระดับใดควรทำงาน