🔵 Arduino · درس ۲

Digital I/O: LED و دکمه

اولین ورودی و خروجی واقعی را می‌سازی و با Pull-up داخلی آشنا می‌شوی.

⏱ ۱۶ دقیقه 🌱 آسان ⭐ +۳۰ XP 🧠 کوئیز الزامی
🎯
بعد از این درس

قراره چی یاد بگیری؟

  • LED را با مقاومت به خروجی دیجیتال کنترل کنی.
  • دکمه را با INPUT_PULLUP بخوانی و منطق معکوسش را بفهمی.
  • از تغییرات تصادفی ورودی Floating جلوگیری کنی.

اولین ورودی و خروجی واقعی

برای خروجی LED، پایه را Output می‌کنیم:

const int ledPin = 8;

void setup() {
  pinMode(ledPin, OUTPUT);
}

بعد با digitalWrite(ledPin, HIGH) و LOW وضعیت را عوض می‌کنیم. LED خارجی باید مقاومت محدودکننده جریان داشته باشد.

خواندن دکمه بدون ورودی معلق

یک روش ساده استفاده از Pull-up داخلی است:

const int buttonPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  bool pressed = digitalRead(buttonPin) == LOW;
  digitalWrite(ledPin, pressed ? HIGH : LOW);
}

دکمه بین Pin و GND است. Pull-up داخلی وقتی دکمه آزاد است پایه را HIGH نگه می‌دارد و با فشردن، GND آن را LOW می‌کند. نام pressed کمک می‌کند منطق معکوس در بقیه برنامه گیج‌کننده نباشد.

چرا مستقیم INPUT نگذاریم؟

اگر INPUT باشد و هیچ مقاومت خارجی سطح را مشخص نکند، ورودی ممکن است Floating شود. لمس سیم یا نویز محیط می‌تواند مقدار را تغییر دهد. این یکی از دلیل‌های «خودش روشن و خاموش میشه» در پروژه‌های مبتدی است.

Bounce

اگر هر فشار دکمه باید فقط یک رویداد تولید کند، Bounce مکانیکی می‌تواند چند تغییر سریع ایجاد کند. برای پروژه اول، اگر فقط LED تا وقتی دکمه نگه داشته شده روشن است مشکل بزرگی نیست. برای شمارنده کلیک، بعدا Debounce نرم‌افزاری با زمان یا State Machine لازم می‌شود.

یک تست کوچک قبل از اتصال همه چیز

قبل از اینکه دکمه و LED را همزمان وارد برنامه کنی، خروجی و ورودی را جدا تست کن. اول یک Blink ساده روی همان ledPin اجرا کن تا مطمئن شوی LED، مقاومت و شماره پایه درست‌اند. بعد یک Sketch جدا بساز که فقط مقدار دکمه را روی Serial چاپ کند. وقتی هر دو بخش مستقل درست شدند، آن‌ها را ترکیب کن. این روش «تست جزء به جزء» جلوی این را می‌گیرد که هنگام خطا همزمان دنبال مشکل در دکمه، LED و منطق برنامه بگردی.

تمرین

مدار دکمه→Arduino→LED را بساز و چهار وضعیت ثبت کن: دکمه آزاد/فشرده و digitalRead/LED مربوط. بعد سیم دکمه را موقتا از Pin جدا کن و ببین چرا بدون Pull-up/Pull-down ممکن است خواندن قابل اعتماد نباشد؛ این تست را فقط در مدار کم‌ولتاژ انجام بده.

🃏
مرور سریع

فلش کارت‌ها

۱ / ۳
🧠
برای تکمیل درس لازمه

آزمون کوتاه همین درس

حد نصاب ۷۰٪

برای عبور از درس، مفهوم را روی یک موقعیت واقعی به کار ببر؛ جواب‌ها از حفظ یک جمله نیستند.

۱

در INPUT_PULLUP و دکمه به GND، pressed را چگونه تشخیص می‌دهیم؟

۲ امتیاز
۲

یک ورودی دیجیتال بدون Pull-up/Pull-down می‌تواند Floating باشد.

۱ امتیاز
۳

جای خالی را پر کن تا پایه دکمه Pull-up داخلی داشته باشد.

۲ امتیاز
pinMode(buttonPin, _____); جای خالی 
۳ سوال هنوز جواب نداره.
🔗
برای عمیق‌تر شدن

منابع تکمیلی