مبتدی⏱ 14 دقیقه مطالعه

در این درس یاد می‌گیرید چگونه از یک دکمهٔ فشاری به‌عنوان ورودی دیجیتال استفاده کنید و مفهوم مهم Pull-up و Pull-down را درک کنید.

چرا به مقاومت Pull-up نیاز داریم؟

وقتی دکمه فشرده نشده، پایهٔ ورودی در یک وضعیت نامشخص (شناور) قرار می‌گیرد و ممکن است نویز آن را به‌اشتباه HIGH یا LOW بخواند. با فعال کردن مقاومت داخلی Pull-up، پایه به‌طور پیش‌فرض HIGH نگه داشته می‌شود و تنها زمانی که دکمه فشرده شود، LOW می‌شود.

PYTHON
from machine import Pin
from time import sleep

button = Pin(4, Pin.IN, Pin.PULL_UP)
led = Pin(2, Pin.OUT)

while True:
    if button.value() == 0:   # دکمه فشرده شده (چون Pull-up است)
        led.on()
    else:
        led.off()
    sleep(0.05)
ℹ️ اطلاعات

در حالت Pull-up: دکمهٔ رهاشده = 1 (HIGH)، دکمهٔ فشرده = 0 (LOW). این برعکس چیزی است که خیلی‌ها ابتدا انتظار دارند.

حذف لرزش کلید (Debounce)

دکمه‌های فیزیکی هنگام فشرده‌شدن چند میلی‌ثانیه «می‌لرزند» و ممکن است چند سیگنال پشت‌سرهم تولید کنند. یک تأخیر کوچک (مثلاً ۲۰ تا ۵۰ میلی‌ثانیه) بعد از تشخیص فشردن، معمولاً این مشکل را حل می‌کند.

PYTHON
from machine import Pin
from time import sleep

button = Pin(4, Pin.IN, Pin.PULL_UP)
led = Pin(2, Pin.OUT)
counter = 0
last_state = 1

while True:
    state = button.value()
    if state == 0 and last_state == 1:
        sleep(0.03)  # debounce
        counter += 1
        led.value(counter % 2)
        print("تعداد فشردن:", counter)
    last_state = state
    sleep(0.01)
مدار دکمه و LED (نمونهٔ پایه — دیاگرام را در Wokwi ویرایش کنید و یک بوتون اضافه کنید) باز کردن در Wokwi ↗

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود.

🛠️ کارگاه عملی

کارگاه عملی: برنامه را طوری تغییر دهید که با هر بار فشردن دکمه، یک پیام متفاوت در سریال چاپ شود (مثلاً با یک لیست از پیام‌ها و شمارنده).

❓ در حالت Pin.PULL_UP، وقتی دکمه فشرده می‌شود مقدار خوانده‌شده چیست؟
طراحی و توسعه: امین شیخ نجدیglcd.ir