🎚️ کلید چرخشی (سلکتوری) (Rotary Switch)
| اسم انگلیسی | Rotary Switch |
|---|---|
| در ووکوی (Wokwi) | نسخهی آمادهای سراغ نداریم |
| دسته | 🎛️ کلید، دکمه و ورودی |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
کلید چرخشی یا سلکتور (Rotary Switch) یک پایهی مشترک (COM) و چند خروجی دارد و با چرخاندن دسته، COM را هر بار فقط به یکی از خروجیها میرساند؛ مثل کلید دور پنکه یا انتخاب حالت مولتیمتر. کنار آردوینو بهترین ابزار برای «انتخاب حالت» است: سرعت ربات، نوع آژیر، یا اینکه کدام بخش برنامه اجرا شود.
کلید چرخشی در ووکوی (Wokwi)
تا جایی که میدانیم ووکوی نسخهی آمادهی این قطعه را ندارد. قطعهی چرخان ووکوی، انکودر wokwi-ky-040، چیز دیگری است: بیانتها میچرخد و پالس میدهد، نه حالت ثابت. برای تمرین همین کد در ووکوی از wokwi-dip-switch-8 استفاده کن: چهار کلید اولش را جای چهار حالت بگذار، یک سمت هر کلید را به پینهای ۲ تا ۵ و سمت روبهرو را به GND ببر و هر بار فقط یک کلید را روشن نگه دار.
خود کلید چرخشی با پایههای COM، P1، P2، P3 و P4 در تینکرکد فارسی هم در حالت ساده (2D) و هم در حالت آردوینو (3D) رایگان شبیهسازی میشود.
سیمکشی با آردوینو
COM به زمین میرود و هر خروجی به یک پین دیجیتال با مقاومت بالاکش داخلی. حالتی که انتخاب شده، تنها پینی است که LOW خوانده میشود. LED نمایش حالت همان LED خود برد روی پین ۱۳ است و سیم نمیخواهد.
| پایهی کلید | وصل به |
|---|---|
| COM | GND آردوینو |
| P1 | پین 2 |
| P2 | پین 3 |
| P3 | پین 4 |
| P4 | پین 5 |
کد نمونه
حالت ۱ خاموش، حالت ۲ چشمک آرام، حالت ۳ چشمک تند و حالت ۴ روشن دائم:
// 4-position rotary switch picks how the on-board LED behaves.
// Wiring: COM -> GND, P1..P4 -> pins 2..5 (INPUT_PULLUP)
const int POS_PINS[4] = {2, 3, 4, 5};
int mode = 1; // last valid position
int readPosition() {
for (int i = 0; i < 4; i++) {
if (digitalRead(POS_PINS[i]) == LOW) return i + 1;
}
return 0; // between two positions
}
void setup() {
for (int i = 0; i < 4; i++) pinMode(POS_PINS[i], INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int pos = readPosition();
if (pos != 0 && pos != mode) { // ignore the gap while turning
mode = pos;
Serial.print("Mode ");
Serial.println(mode);
}
unsigned long t = millis();
if (mode == 1) digitalWrite(LED_BUILTIN, LOW);
else if (mode == 2) digitalWrite(LED_BUILTIN, (t / 800) % 2);
else if (mode == 3) digitalWrite(LED_BUILTIN, (t / 150) % 2);
else digitalWrite(LED_BUILTIN, HIGH);
}
نکتهی اصلی در تابع readPosition است: وقتی دسته بین دو حالت است، صفر برمیگرداند و برنامه حالت قبلی را نگه میدارد؛ پس LED موقع چرخاندن یک لحظه خاموش نمیشود.
اشتباههای رایج
- COM به 5V بدون مقاومت پایینکش: یا COM را به GND بزن و INPUT_PULLUP بنویس، یا COM را به 5V بزن و برای هر خروجی یک مقاومت پایینکش ۱۰ کیلواهم بگذار. ترکیب نصفه یعنی پینهای معلق.
- فرض کردن ترتیب پایهها: شمارهی چاپشده روی کلید همیشه با ترتیب فیزیکی پایهها نمیخواند. اول با همین کد و سریال مانیتور ببین هر حالت کدام عدد را چاپ میکند.
- اشتباه گرفتن با پتانسیومتر: اگر مقدار پیوسته میخواهی، مثل ولوم صدا، پتانسیومتر مناسبتر است.
- استفاده از پینهای ۰ و ۱: این دو پین مال ارتباط سریالاند؛ اگر خروجیها را به آنها بزنی، سریال مانیتور و آپلود به هم میریزد.
آموزشهای مرتبط
- دیپ سوییچ چهارتایی، جایگزین این کلید در ووکوی
- کلید فشاری، برای منوهایی که با «بعدی» جلو میروند
- سریال مانیتور و نمودار سریال، برای دیدن حالت انتخابشده
- ۱۵ مدار پایهی الکترونیک، با بخش مقاومت بالاکش و پایینکش
سؤالهای رایج
کلید چرخشی با انکودر چرخشی (Rotary Encoder) چه فرقی دارد؟
کلید چرخشی چند حالت ثابت دارد و در هر حالت یک پایهی مشخص به COM وصل است؛ آردوینو با یک نگاه میفهمد روی کدام حالت است. انکودر مثل KY-040 بیانتها میچرخد و فقط پالس «یک قدم به چپ» یا «یک قدم به راست» میدهد و برنامه باید شمارش کند.
ووکوی کلید سلکتوری دارد؟
تا جایی که میدانیم نه. برای تمرین کد میتوانی چهار کلید از دیپ سوییچ ووکوی را جای چهار حالت بگذاری و هر بار فقط یکی را روشن کنی. خود کلید چرخشی در تینکرکد فارسی رایگان شبیهسازی میشود.
چرا وقتی کلید را میچرخانم یک لحظه هیچ حالتی خوانده نمیشود؟
بیشتر کلیدهای چرخشی «قطع قبل از وصل» هستند: موقع چرخیدن، اول اتصال قبلی قطع میشود و بعد اتصال بعدی وصل. برنامه باید این لحظه را نادیده بگیرد و آخرین حالت معتبر را نگه دارد.