دکمههای فشاری (Push Buttons) یکی از ابتداییترین و در عین حال پرکاربردترین قطعات ورودی در پروژههای آردوینو هستند. با استفاده از دکمهها میتوانیم به آردوینو فرمان دهیم تا عملی خاص را انجام دهد، مثلاً یک LED را روشن یا خاموش کند، یک موتور را به حرکت درآورد یا وضعیت یک برنامه را تغییر دهد. در این مقاله به نحوه اتصال و برنامهنویسی دکمههای فشاری با آردوینو میپردازیم.
قطعات مورد نیاز:
آشنایی با دکمه فشاری:
دکمههای فشاری معمولاً چهار پایه دارند. دو پایه در یک سمت به هم متصل هستند و دو پایه در سمت دیگر نیز به هم متصلاند. وقتی دکمه را فشار میدهیم، این دو جفت پایه به هم متصل میشوند و یک مدار بسته ایجاد میکنند.
مدار اتصال دکمه به آردوینو:
برای خواندن وضعیت یک دکمه با آردوینو، باید آن را به یکی از پینهای دیجیتال آردوینو متصل کنیم. اما اتصال مستقیم دکمه به پین دیجیتال کافی نیست و ممکن است باعث خواندن نادرست وضعیت (Floating Input) شود. برای حل این مشکل از مقاومتهای Pull-up یا Pull-down استفاده میکنیم.
۱. مدار با مقاومت Pull-down (خارجی):
در این پیکربندی، پین آردوینو به طور پیشفرض در وضعیت LOW (صفر ولت) قرار میگیرد.
۲. مدار با مقاومت Pull-up (داخلی آردوینو):
آردوینو دارای مقاومتهای Pull-up داخلی است که میتوانیم از آنها استفاده کنیم و نیازی به مقاومت خارجی نداشته باشیم. این روش سادهتر و رایجتر است.
مثال کد آردوینو (با استفاده از Pull-up داخلی):
در این مثال، با هر بار فشردن دکمه، وضعیت یک LED تغییر میکند (روشن/خاموش).
توضیح کد:
1.
2.
3.
4.
*
*
*
*
5.
*
*
*
*
*
*
*
نکته مهم: Debouncing (رفع پرش سیگنال):
وقتی یک دکمه مکانیکی را فشار میدهید یا رها میکنید، به دلیل ارتعاشات فیزیکی کنتاکتها، سیگنال ورودی برای مدت کوتاهی (چند میلیثانیه) بین HIGH و LOW نوسان میکند. این پدیده "پرش سیگنال" یا "Debouncing" نامیده میشود. اگر این مشکل را برطرف نکنیم، آردوینو ممکن است یک بار فشردن دکمه را به عنوان چندین بار فشردن تشخیص دهد.
راهحلهای Debouncing:
با درک این مفاهیم، میتوانید به راحتی دکمههای فشاری را در پروژههای آردوینو خود به کار بگیرید و تعامل کاربر با برد را فراهم کنید.
قطعات مورد نیاز:
- برد آردوینو (Uno، Nano یا هر مدل دیگر)
- یک عدد دکمه فشاری چهار پایه (معمولاً)
- یک عدد مقاومت ۱۰ کیلواهم (برای مدار Pull-down یا Pull-up خارجی)
- یک عدد LED (اختیاری، برای تست خروجی)
- یک عدد مقاومت ۲۲۰ اهم (برای LED)
- برد بورد (Breadboard)
- سیمهای جامپر
آشنایی با دکمه فشاری:
دکمههای فشاری معمولاً چهار پایه دارند. دو پایه در یک سمت به هم متصل هستند و دو پایه در سمت دیگر نیز به هم متصلاند. وقتی دکمه را فشار میدهیم، این دو جفت پایه به هم متصل میشوند و یک مدار بسته ایجاد میکنند.
مدار اتصال دکمه به آردوینو:
برای خواندن وضعیت یک دکمه با آردوینو، باید آن را به یکی از پینهای دیجیتال آردوینو متصل کنیم. اما اتصال مستقیم دکمه به پین دیجیتال کافی نیست و ممکن است باعث خواندن نادرست وضعیت (Floating Input) شود. برای حل این مشکل از مقاومتهای Pull-up یا Pull-down استفاده میکنیم.
۱. مدار با مقاومت Pull-down (خارجی):
در این پیکربندی، پین آردوینو به طور پیشفرض در وضعیت LOW (صفر ولت) قرار میگیرد.
- یک پایه دکمه را به ۵ ولت آردوینو وصل کنید.
- پایه مقابل دکمه را به پین دیجیتال آردوینو (مثلاً پین ۲) و همچنین از طریق یک مقاومت ۱۰ کیلواهم به GND (زمین) وصل کنید.
- وقتی دکمه فشرده نشود، پین دیجیتال از طریق مقاومت به زمین متصل است و آردوینو LOW میخواند.
- وقتی دکمه فشرده شود، پین دیجیتال مستقیماً به ۵ ولت متصل میشود و آردوینو HIGH میخواند.
۲. مدار با مقاومت Pull-up (داخلی آردوینو):
آردوینو دارای مقاومتهای Pull-up داخلی است که میتوانیم از آنها استفاده کنیم و نیازی به مقاومت خارجی نداشته باشیم. این روش سادهتر و رایجتر است.
- یک پایه دکمه را به GND آردوینو وصل کنید.
- پایه مقابل دکمه را به پین دیجیتال آردوینو (مثلاً پین ۲) وصل کنید.
- در کد آردوینو، پین را به عنوان
INPUT_PULLUPتعریف میکنیم. - وقتی دکمه فشرده نشود، پین دیجیتال از طریق مقاومت Pull-up داخلی به ۵ ولت متصل است و آردوینو HIGH میخواند.
- وقتی دکمه فشرده شود، پین دیجیتال مستقیماً به GND متصل میشود و آردوینو LOW میخواند.
مثال کد آردوینو (با استفاده از Pull-up داخلی):
در این مثال، با هر بار فشردن دکمه، وضعیت یک LED تغییر میکند (روشن/خاموش).
C++:
محتوای بلوک کدها در دسترس شما نیست. برای مشاهده بلوک کدها، وارد انجمن شوید یاثبت نام کنید
توضیح کد:
1.
const int buttonPin = 2;: پین دیجیتال ۲ را برای اتصال دکمه تعریف میکنیم.2.
const int ledPin = 13;: پین ۱۳ را برای LED تعریف میکنیم. این پین معمولاً دارای یک LED داخلی روی برد آردوینو است.3.
buttonState, lastButtonState, ledState: متغیرهایی برای نگهداری وضعیتهای مختلف.4.
setup():*
pinMode(buttonPin, INPUT_PULLUP);: پین دکمه را به عنوان ورودی با فعال کردن مقاومت Pull-up داخلی تنظیم میکند. این یعنی وقتی دکمه فشرده نشود، پین HIGH است و وقتی فشرده شود، LOW میشود.*
pinMode(ledPin, OUTPUT);: پین LED را به عنوان خروجی تنظیم میکند.*
digitalWrite(ledPin, ledState);: وضعیت اولیه LED را تنظیم میکند (در اینجا LOW).*
Serial.begin(9600);: ارتباط سریال را برای نمایش خروجی در مانیتور سریال فعال میکند.5.
loop():*
buttonState = digitalRead(buttonPin);: وضعیت فعلی پین دکمه را میخواند.*
if (buttonState != lastButtonState): این شرط بررسی میکند که آیا وضعیت دکمه از آخرین باری که خوانده شده، تغییر کرده است یا خیر. این کار برای تشخیص لحظه فشردن یا رها کردن دکمه است.*
if (buttonState == LOW): اگر دکمه فشرده شده باشد (با Pull-up داخلی، یعنی پین LOW شده است).*
ledState = !ledState;: وضعیت LED را معکوس میکند (اگر روشن بود خاموش و اگر خاموش بود روشن).*
digitalWrite(ledPin, ledState);: وضعیت جدید را به LED اعمال میکند.*
delay(50);: یک تاخیر کوتاه ۵۰ میلیثانیهای برای Debouncing (رفع پرش سیگنال) اعمال میشود. این تاخیر کمک میکند تا از خواندن چندین بار وضعیت دکمه در یک بار فشردن جلوگیری شود.*
lastButtonState = buttonState;: وضعیت فعلی دکمه را برای مقایسه در حلقه بعدی ذخیره میکند.نکته مهم: Debouncing (رفع پرش سیگنال):
وقتی یک دکمه مکانیکی را فشار میدهید یا رها میکنید، به دلیل ارتعاشات فیزیکی کنتاکتها، سیگنال ورودی برای مدت کوتاهی (چند میلیثانیه) بین HIGH و LOW نوسان میکند. این پدیده "پرش سیگنال" یا "Debouncing" نامیده میشود. اگر این مشکل را برطرف نکنیم، آردوینو ممکن است یک بار فشردن دکمه را به عنوان چندین بار فشردن تشخیص دهد.
راهحلهای Debouncing:
- نرمافزاری: استفاده از تاخیر کوتاه (مانند
delay(50);در مثال بالا) یا پیادهسازی الگوریتمهای پیچیدهتر با استفاده از زمانسنجی (millis()) برای نادیده گرفتن تغییرات سریع. - سختافزاری: استفاده از خازن و مقاومت در مدار دکمه برای فیلتر کردن نوسانات.
با درک این مفاهیم، میتوانید به راحتی دکمههای فشاری را در پروژههای آردوینو خود به کار بگیرید و تعامل کاربر با برد را فراهم کنید.