🔀 گیت منطقی OR (OR Gate (74HC32))
| اسم انگلیسی | OR Gate (74HC32) |
|---|---|
| در ووکوی (Wokwi) | نسخهی آمادهای سراغ نداریم |
| دسته | 🔀 گیتهای منطقی |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
گیت منطقی OR (OR Gate) خروجیاش ۱ میشود اگر دستکم یکی از ورودیها ۱ باشد، و فقط وقتی همه صفرند صفر میدهد. آیسی 74HC32 چهار گیت OR دوورودی دارد و پایههایش درست مثل 74HC08 چیده شدهاند. کاربرد کلاسیکش «چند دکمه برای یک زنگ» است: زنگ در جلو یا زنگ در پشت، فرقی نمیکند. کنار آردوینو هم یک کاربرد خیلی عملی دارد: چند سنسور را روی یک پین وقفه جمع میکند.
گیت OR در ووکوی (Wokwi)
ووکوی در بخش منطق (Logic) گیت OR ساده را دارد و میتوانی آن را بین دکمهها و آردوینو بگذاری. ولی تا جایی که میدانیم ووکوی نسخهی آمادهی این قطعه را به شکل آیسی 74HC32 با پایهشماری واقعی ندارد. اگر فقط منطق را میخواهی، OR را در کد هم میشود ساخت: digitalRead(5) || digitalRead(6).
در تینکرکد فارسی گیت OR در هر دو مود رایگان است؛ مدار گیت OR با دو دکمه و درس گیت OR را ببین. مدار مدار OR (یا این یا اون) هم همین منطق را فقط با دو کلید موازی و بدون آیسی نشان میدهد.
سیمکشی با آردوینو
اونو فقط دو پین وقفهی خارجی دارد (2 و 3). اگر چند سنسور داری که هر کدام باید فوراً آردوینو را خبر کنند، خروجیهایشان را با OR یکی کن و به پین 2 بده؛ بعد در کد ببین کدام بوده.
| پایهی قطعه | وصل به |
|---|---|
| پایهی ۱ (1A) | دکمهی A به 5V، مقاومت ۱۰ کیلو به GND، و پین 5 |
| پایهی ۲ (1B) | دکمهی B به 5V، مقاومت ۱۰ کیلو به GND، و پین 6 |
| پایهی ۳ (1Y) | پین 2 (وقفه) |
| پایهی ۱۴ (VCC) و پایهی ۷ (GND) | 5V و GND |
| ورودیهای بیاستفاده (۴، ۵، ۹، ۱۰، ۱۲، ۱۳) | GND |
| بازر یا پیزو (+ و −) | پین 8 و GND |
مقاومتهای ۱۰ کیلو پولداون (Pull-down) هستند: وقتی دکمه رها است، ورودی گیت را صفر نگه میدارند.
کد نمونه
وقفه فقط یک پرچم را بالا میبرد. حلقه وقتی پرچم را دید، پینهای 5 و 6 را میخواند تا بفهمد کدام دکمه زده شده، یک بوق کوتاه میزند و برای پوشاندن پرش دکمه کمی صبر میکند.
// 74HC32 joins two buttons onto interrupt pin 2; pins 5 and 6 say which one.
const int PIN_ANY = 2; // gate output 1Y
const int PIN_A = 5; // button A (also on gate input 1A)
const int PIN_B = 6; // button B (also on gate input 1B)
const int BUZZER_PIN = 8;
volatile bool triggered = false;
void onAny() {
triggered = true; // just raise a flag
}
void setup() {
Serial.begin(9600);
pinMode(PIN_ANY, INPUT);
pinMode(PIN_A, INPUT);
pinMode(PIN_B, INPUT);
attachInterrupt(digitalPinToInterrupt(PIN_ANY), onAny, RISING);
}
void loop() {
if (!triggered) return;
delay(5); // let the inputs settle
Serial.print("Ring from:");
if (digitalRead(PIN_A) == HIGH) Serial.print(" A");
if (digitalRead(PIN_B) == HIGH) Serial.print(" B");
Serial.println();
tone(BUZZER_PIN, 1200, 150);
delay(250); // ignore the button bounce
triggered = false;
}
اشتباههای رایج
- نبودن پولداون: بدون مقاومت ۱۰ کیلو به GND، ورودی گیت با دکمهی رها شناور است و گیت خودبهخود ۱ میدهد.
- OR کردن با سیم: وصل کردن مستقیم دو خروجی به هم OR نیست؛ اگر یکی HIGH و دیگری LOW بدهد، اتصال کوتاه ساختهای. یا از گیت استفاده کن یا از دو دیود (Diode OR).
- کار زیاد در وقفه: بوق زدن یا چاپ کردن داخل
onAnyبرنامه را کند یا قفل میکند؛ فقط پرچم را عوض کن. - ورودیهای بیاستفادهی رها: مثل همهی آیسیهای 74HC، ورودی گیتهای دیگر را به GND ببند.
آموزشهای مرتبط
- مدار منطقی و دیجیتال: گیتها تا شمارنده
- گیت AND و تستر جدول درستی
- دکمهی فشاری در ووکوی
- دکمه و وقفه روی رزبری پای پیکو
سؤالهای رایج
گیت OR چه کاربردی کنار آردوینو دارد؟
میتواند چند سنسور یا دکمه را روی یک پین وقفه جمع کند. آردوینو اونو فقط دو پین وقفهی خارجی دارد؛ با OR هر کدام از ورودیها که فعال شود، آردوینو فوراً خبردار میشود.
چرا دو خروجی را مستقیم به هم وصل نکنم؟
اگر یکی HIGH و دیگری LOW باشد، بین ۵ ولت و زمین اتصال کوتاه درست میشود و خروجیها آسیب میبینند. برای OR از گیت یا دو دیود استفاده کن.