🔲 کلید تکتایل (تک سوییچ) (Tactile Switch)
| اسم انگلیسی | Tactile Switch |
|---|---|
| در ووکوی (Wokwi) | wokwi-pushbutton |
| دسته | 🎛️ کلید، دکمه و ورودی |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
کلید تکتایل یا تک سوییچ (Tactile Switch) همان دکمهی کوچک چهارپایهای است که دکمهی ریست آردوینو هم از همین نوع است و در ریموت و ماوس هم پیدایش میکنی؛ تا وقتی فشارش میدهی وصل است و رها کنی قطع. برای هر ورودی دستی، از شمارنده و بازی واکنش تا منوی LCD، اولین انتخاب است.
کلید تکتایل در ووکوی (Wokwi)
در ووکوی این دکمه با شناسهی wokwi-pushbutton اضافه میشود و رنگ کلاهکش را با ویژگی color عوض میکنی. چهار پایه دارد: 1.l، 2.l، 1.r و 2.r. پایههایی که عدد یکسان دارند (مثلاً 1.l و 1.r) از داخل به هم وصلاند و فشار دکمه، اتصال ۱ را به اتصال ۲ میرساند. این تکهی diagram.json دکمه را قطری میبندد:
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0 },
{ "type": "wokwi-pushbutton", "id": "btn1", "top": -90, "left": 120, "attrs": { "color": "green" } }
],
"connections": [
[ "uno:2", "btn1:1.l", "green", [] ],
[ "btn1:2.r", "uno:GND.1", "black", [] ]
]
}
| پایه در ووکوی | وصل به | توضیح |
|---|---|---|
| 1.l | uno:2 | ورودی با INPUT_PULLUP |
| 2.r | uno:GND.1 | قطری نسبت به 1.l، پس حتماً در جفت دیگر است |
| 1.r و 2.l | خالی | همجفت دو پایهی بالا |
در تینکرکد فارسی همین دکمه با پایههای A1، A2، B1 و B2 رایگان شبیهسازی میشود؛ جفت A یک اتصال است و جفت B اتصال دیگر.
سیمکشی با آردوینو
| پایهی قطعه | وصل به |
|---|---|
| یک پایه (مثلاً A1) | پین 2 آردوینو |
| پایهی قطری (B2) | GND |
روی بردبورد دکمه را روی شکاف وسط بگذار تا هر جفت پایه در یک نیمه بیفتد. قاعدهی طلایی: از دو پایهی قطری استفاده کن؛ همیشه در دو جفت مختلفاند و جهت نصب دیگر مهم نیست. خروجی این مثال LED خود برد روی پین ۱۳ است.
کد نمونه
هر فشار، LED را خاموش و روشن میکند (Toggle) و تعداد فشارها را چاپ میکند. لرزش کنتاکت با مقایسهی زمان حذف شده، بدون delay:
// Tactile switch toggles the on-board LED, with software debounce.
// Wiring: one pin -> pin 2, the diagonal pin -> GND
const int BTN = 2;
const unsigned long DEBOUNCE_MS = 30;
int stableState = HIGH; // HIGH = released (pull-up)
int lastReading = HIGH;
unsigned long lastChange = 0;
bool ledOn = false;
int presses = 0;
void setup() {
pinMode(BTN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(BTN);
if (reading != lastReading) { // contact moved: restart the timer
lastChange = millis();
lastReading = reading;
}
if (millis() - lastChange > DEBOUNCE_MS && reading != stableState) {
stableState = reading;
if (stableState == LOW) { // a clean new press
ledOn = !ledOn;
digitalWrite(LED_BUILTIN, ledOn);
presses++;
Serial.print("Presses: ");
Serial.println(presses);
}
}
}
چرا ۳۰ میلیثانیه؟ لرزش بیشتر دکمهها در کمتر از ۱۰ تا ۲۰ میلیثانیه تمام میشود و انگشت آدم هم سریعتر از حدود ۵۰ میلیثانیه دو بار فشار نمیدهد؛ پس ۳۰ هم لرزش را میپوشاند و هم فشار واقعی را جا نمیاندازد. چون برنامه هیچجا منتظر نمیماند، کنار همین کد میتوانی LED دیگری را چشمک بزنی یا یک سنسور بخوانی.
اشتباههای رایج
- دکمه روی یک نیمهی بردبورد: جفت پایهها در یک ستون میافتند و دکمه همیشه «فشرده» دیده میشود.
- فراموش کردن INPUT_PULLUP: وقتی دکمه رها است، پین معلق میماند و فشارهای خیالی میخوانی.
- نادیده گرفتن پرش: هر فشار دو یا سه بار شمرده میشود؛ ممکن است در ووکوی هم همین را ببینی. روش نرمافزاری را در درس دکمهی بیلرزش قدمبهقدم ببین.
- دکمه بین 5V و GND: اگر دو سر دکمه را مستقیم به 5V و GND ببندی، فشار دادنش تغذیه را اتصال کوتاه میکند. یک سر همیشه به پین میرود.
آموزشهای مرتبط
- کلید فشاری (Push Button)، همان دکمه در اندازهی بزرگتر
- دکمه و وقفه با میکروپایتون روی پیکو
- درس مدار با ووکوی، جلسهی دکمه و تصمیمگیری
- ۱۵ مدار پایهی الکترونیک، با حذف لرزش سختافزاری RC
سؤالهای رایج
چرا کلید تکتایل چهار پایه دارد؟
پایهها دوبهدو از داخل به هم وصلاند و فقط دو اتصال واقعی وجود دارد؛ چهار پایه برای محکم نشستن روی برد است. در ووکوی هم 1.l و 1.r یک اتصالاند و 2.l و 2.r اتصال دیگر.
چرا هر بار فشار دادن دکمه چند بار شمرده میشود؟
کنتاکت فلزی دکمه هنگام فشار چند میلیثانیه میلرزد (Bounce) و آردوینو هر لرزش را یک فشار میبیند. با مقایسهی زمان با millis این را حذف کن؛ کد همین صفحه این کار را میکند.
دکمه را به 5V وصل کنم یا GND؟
سادهترین روش این است که یک پایه به پین و پایهی قطری به GND برود و در کد INPUT_PULLUP بنویسی؛ آنوقت فشردن یعنی LOW. وصل به 5V هم شدنی است ولی یک مقاومت پایینکش ۱۰ کیلواهم لازم دارد.