🎛️ دیپ سوییچ چهارتایی (DIP Switch (4-position))
| اسم انگلیسی | DIP Switch (4-position) |
|---|---|
| در ووکوی (Wokwi) | wokwi-dip-switch-8 |
| دسته | 🎛️ کلید، دکمه و ورودی |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
دیپ سوییچ چهارتایی (DIP Switch) چهار کلید ریز کنار هم است که با نوک خودکار ON یا OFF میشوند. کار اصلیاش تنظیمهایی است که کم عوض میشوند: آدرس یک دستگاه، کانال ریموت در پارکینگ، یا انتخاب حالت کار برنامه بدون آپلود دوباره. چهار کلید یعنی چهار بیت، یعنی ۱۶ حالت از ۰ تا ۱۵.
دیپ سوییچ در ووکوی (Wokwi)
ووکوی نسخهی چهارتایی ندارد، ولی wokwi-dip-switch-8 با هشت کلید هست؛ چهار کلید اول را استفاده کن و بقیه را خالی بگذار. هر کلید دو پایهی روبهروی هم دارد که در حالت ON به هم وصل میشوند. اگر نشانگر موس را روی یک پایه نگه داری، ووکوی اسمش را نشان میدهد؛ برای همین در این تکه فقط قطعهها آمدهاند و سیمها را با کلیک میکشی:
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0 },
{ "type": "wokwi-dip-switch-8", "id": "sw1", "top": -110, "left": 100 }
],
"connections": []
}
سیمها: یک ردیف از پایههای کلید ۱ تا ۴ به پینهای ۲، ۳، ۴ و ۵ آردوینو، و پایههای روبهروی همان چهار کلید همه به GND. کلیدهای ۵ تا ۸ به جایی وصل نمیشوند.
در تینکرکد فارسی نسخهی چهارتایی با پایههای 1A تا 4A و 1B تا 4B هست و هم در حالت ساده (2D) و هم در حالت آردوینو (3D) رایگان شبیهسازی میشود.
سیمکشی با آردوینو
| پایهی قطعه | وصل به |
|---|---|
| 1A | پین 2 (بیت با ارزش ۱) |
| 2A | پین 3 (ارزش ۲) |
| 3A | پین 4 (ارزش ۴) |
| 4A | پین 5 (ارزش ۸) |
| 1B تا 4B | همه به GND |
با INPUT_PULLUP مقاومت بیرونی لازم نیست: کلید OFF یعنی HIGH و کلید ON یعنی LOW.
کد نمونه
این برنامه مثل یک دستگاه واقعی رفتار میکند: تنظیم را یک بار در setup میخواند، عدد را به شکل دودویی و دهدهی چاپ میکند و LED خود برد را همان تعداد بار چشمک میزند. برای اعمال تنظیم تازه، دکمهی ریست را بزن.
// 4-way DIP switch read once at start-up, like a device address.
// Wiring: switches 1..4 one side -> pins 2..5, other side -> GND
const int DIP_PINS[4] = {2, 3, 4, 5}; // switch 1 = value 1 ... switch 4 = value 8
int setting = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
for (int i = 0; i < 4; i++) pinMode(DIP_PINS[i], INPUT_PULLUP);
delay(10); // let the pull-ups settle
for (int i = 0; i < 4; i++) {
if (digitalRead(DIP_PINS[i]) == LOW) bitSet(setting, i); // ON = LOW
}
Serial.print("DIP = ");
for (int i = 3; i >= 0; i--) Serial.print(bitRead(setting, i));
Serial.print(" = ");
Serial.println(setting); // 0..15
}
void loop() {
for (int i = 0; i < setting; i++) { // blink the setting, then pause
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
}
delay(1500);
}
حلقهی چاپ از بیت ۳ به ۰ میرود تا صفرهای سمت چپ هم دیده شوند؛ Serial.print(setting, BIN) آن صفرها را حذف میکند. برای تمرین تبدیل دودویی، مبدل دودویی را کنارش باز کن و اگر کار با بیتها برایت تازه است، درس عملگرهای بیتی را ببین.
اشتباههای رایج
- ترتیب بیتها برعکس: اگر کلید ۴ را ارزش ۱ فرض کنی، عددها آینهای میشوند. اول فقط کلید ۱ را روشن کن؛ باید ۱ چاپ شود.
- فراموش کردن مقاومت بالاکش: کلیدهای OFF معلق میمانند و با هر ریست تنظیم تصادفی میخوانی.
- سمت مشترک به 5V با INPUT_PULLUP: در این حالت همهی پینها در هر وضعیتی HIGH هستند و هیچ تغییری دیده نمیشود. سمت مشترک باید به GND برود.
- انتظار تغییر فوری: این کد عمداً فقط در شروع میخواند. اگر تغییر زنده میخواهی، همان حلقهی خواندن را به
loopببر.
آموزشهای مرتبط
- کلید چرخشی (سلکتوری)، وقتی فقط یک حالت از چند حالت مجاز است
- نوار ۱۰ تایی LED، برای نمایش بیتها با چراغ
- مدار منطقی و دیجیتال، از گیت تا شمارنده
- ۴۰ مدار آردوینو برای ووکوی، با شمارندهی باینری ۴ بیتی
سؤالهای رایج
ووکوی دیپ سوییچ چهارتایی دارد؟
ووکوی دیپ سوییچ هشتتایی (wokwi-dip-switch-8) دارد. چهار کلید اولش را استفاده کن و بقیه را خالی بگذار؛ کد و سیمکشی همان است.
چرا دستگاهها دیپ سوییچ را فقط موقع روشن شدن میخوانند؟
چون دیپ سوییچ برای تنظیمهای کمتغییر است، مثل آدرس دستگاه یا کانال رادیو. اگر وسط کار عوض شود، ممکن است دستگاه ناگهان با آدرس دیگری حرف بزند؛ پس معمولاً یک بار در setup خوانده میشود و برای اعمال تغییر، دستگاه را ریست میکنی.
ON روی دیپ سوییچ یعنی HIGH؟
نه لزوماً. ON یعنی دو پایهی آن کلید به هم وصلاند. اگر یک طرف به GND باشد و پین با INPUT_PULLUP خوانده شود، ON یعنی LOW.