🤖 روبومیکرآموزش آردوینوشبیه‌ساز آنلاین
روبومیکرآموزش آردوینوخواندن دکمه با digitalRead

خواندن دکمه با digitalRead

در درس‌های قبل یاد گرفتیم چطور یک پایه را خروجی کنیم و LED روشن کنیم. حالا می‌خواهیم یک ورودی بخوانیم: یک دکمه. با تابع digitalRead می‌توانیم بفهمیم دکمه فشرده شده یا نه.

پایه را ورودی کنیم

اول باید پایه‌ای که دکمه به آن وصل است را ورودی تعریف کنیم. در آردوینو یک حالت خیلی کاربردی داریم به نام INPUT_PULLUP. این حالت یک مقاومت داخلی را فعال می‌کند تا پایه ورودی هیچ‌وقت «شناور» و بی‌مقدار نباشد.

pinMode(2, INPUT_PULLUP);

چرا با فشردن دکمه مقدار LOW می‌شود؟

این نکته مهم است. وقتی از INPUT_PULLUP استفاده می‌کنیم، در حالت عادی (دکمه رها) مقدار پایه HIGH است. وقتی دکمه را فشار می‌دهیم، پایه به زمین (GND) وصل می‌شود و مقدار آن LOW می‌شود. پس منطق برعکس چیزی است که شاید انتظار داشته باشی: فشردن = LOW.

کد کامل

این کد دکمه‌ای روی پایه ۲ را می‌خواند و تا وقتی فشرده است، LED روی پایه ۱۳ را روشن نگه می‌دارد:

int buttonPin = 2;
int ledPin = 13;

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

void loop() {
  int state = digitalRead(buttonPin);

  if (state == LOW) {       // دکمه فشرده شده
    digitalWrite(ledPin, HIGH);
  } else {                  // دکمه رها است
    digitalWrite(ledPin, LOW);
  }
}

در این کد، digitalRead(buttonPin) مقدار پایه را می‌خواند و در متغیر state می‌ریزد. سپس با if بررسی می‌کنیم اگر برابر LOW بود (یعنی دکمه فشرده شده)، LED روشن شود و در غیر این صورت خاموش بماند.

نکته: اگر دکمه را با مقاومت بیرونی به ۵ ولت وصل کنی، منطق برعکس می‌شود و فشردن دکمه مقدار HIGH می‌دهد. حالت INPUT_PULLUP ساده‌تر است چون به سیم‌کشی اضافی نیاز ندارد.
گاهی دکمه‌های واقعی هنگام فشردن «لرزش» (bounce) دارند و در کسری از ثانیه چند بار قطع و وصل می‌شوند. برای شمارش دقیق فشار دکمه باید این لرزش را مدیریت کرد؛ فعلاً برای روشن/خاموش کردن LED مشکلی ایجاد نمی‌کند.

این کد را همین حالا در حالت کدنویسی شبیه‌ساز روبومیکر بنویس و اجرا کن.

🔌 همین حالا توی شبیه‌ساز آنلاین روبومیکر امتحان کن — رایگان و بدون نصب