ورودی و خروجی دیجیتال — چشمکزن
پینهای دیجیتال Uno را با pinMode و digitalWrite کنترل میکنید، چشمکزن LED میسازید و دکمه را با INPUT_PULLUP میخوانید.
آنچه در این درس میآموزید
- پین دیجیتال را با pinMode و digitalWrite بهعنوان خروجی کنترل کنید
- LED خارجی را با مقاومت ۲۲۰ اهم به برد وصل کنید
- حالت دکمه را با INPUT_PULLUP بخوانید و به روشنوخاموش LED وصل کنید
فهرست مطالب
دنیای دیجیتال فقط دو حالت میشناسد: HIGH (۵ ولت) و LOW (صفر ولت). همهٔ کارهای این درس با همین دو حالت انجام میشود: روشنوخاموشکردن LED و خواندن وضعیت دکمه.
«چشمکزن» (Blink) همان «سلام دنیا» دنیای سختافزار است؛ شما آن را هم روی LED داخلی برد و هم روی مدار خارجی خودتان میسازید و بعد دکمه را بهعنوان ورودی اضافه میکنید.
پینهای دیجیتال Uno
Uno تعداد ۱۴ پین دیجیتال (D0 تا D13) دارد که هر کدام میتوانند خروجی یا ورودی باشند:
| پینها | کاربرد | نکته |
|---|---|---|
| D0 و D1 | ارتباط سریال با رایانه | برای مدار خودتان رزرو نکنید |
| D2 تا D13 | ورودی/خروجی عمومی | D13 به LED داخلی برد وصل است |
| پینهای با علامت ~ | خروجی PWM | در درس PWM بهکار میآید |
چشمکزن روی LED داخلی
LED داخلی برد روی پین ۱۳ نصب است و ثابت LED_BUILTIN همان پین را نشان میدهد. این کد بدون هیچ سیمی کار میکند:
void setup() {
pinMode(LED_BUILTIN, OUTPUT); // Set pin 13 as output
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // On: 5 volts
delay(1000); // Wait one second
digitalWrite(LED_BUILTIN, LOW); // Off: 0 volts
delay(1000);
}توضیح خطبهخط:
pinMode(LED_BUILTIN, OUTPUT)درsetup()به میکروکنترلر میگوید این پین بهعنوان خروجی بهکار میرود.digitalWrite(pin, HIGH)پین را به ۵ ولت وdigitalWrite(pin, LOW)آن را به صفر ولت میبرد.delay(1000)برنامه را ۱۰۰۰ میلیثانیه نگه میدارد؛ در این مدت برد هیچ کار دیگری نمیکند.- چون
loop()بینهایت تکرار میشود، LED تا ابد هر ثانیه حالتش عوض میشود.
اتصال LED خارجی
برای ساخت مدار خودتان، LED و مقاومت ۲۲۰ اهم روی برد سرهمبندی (Breadboard) بگذارید:
| پین آردوینو | اتصال | توضیح |
|---|---|---|
| D12 | یک پایهٔ مقاومت ۲۲۰ اهم | خروجی برنامه |
| پایهٔ دیگر مقاومت | آند LED (پایهٔ بلند) | جریان از پین به LED میرسد |
| GND | کاتد LED (پایهٔ کوتاه) | مسیر بازگشت جریان |
مقاومت سری جریان را محدود میکند: از اختلاف ۵ منهای ۲ ولت روی ۲۲۰ اهم، جریان حدود ۱۳٫۶ میلیآمپر میگذرد که هم برای LED و هم برای پین برد امن است. در کد فقط کافی است LED_BUILTIN را با عدد ۱۲ عوض کنید.
خواندن دکمه با INPUT_PULLUP
پین دیجیتال میتواند ورودی هم باشد. مشکل ورودی بدون اتصال مشخص این است که حالتش شناور و نامطمئن است؛ راهحل استاندارد، «مقاومت کشیده به بالا» (Pull-up) است و آردوینو این مقاومت را داخل خودش دارد:
| پین آردوینو | اتصال | توضیح |
|---|---|---|
| D2 | یک پایهٔ دکمه | ورودی برنامه |
| پایهٔ دیگر دکمه | GND | با فشردن دکمه، پین به زمین وصل میشود |
با INPUT_PULLUP پین بهطور پیشفرض HIGH است و با فشردن دکمه LOW میشود:
const int buttonPin = 2;
const int ledPin = 12;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (digitalRead(buttonPin) == LOW) {
digitalWrite(ledPin, HIGH); // Button pressed: LED on
} else {
digitalWrite(ledPin, LOW); // Button released: LED off
}
}منطق برعکس به نظر میرسد اما درست است: مقاومت داخلی پین را به ۵ ولت «میکشد» (پس حالت عادی HIGH)، و دکمهٔ فشردهشده پین را به GND وصل میکند (LOW).
تمرینها
تمرین
تمرین ۱ — الگوی دوبل
چشمکزنی بنویسید که LED داخلی در هر دوره، دو بار کوتاه روشن شود (هر بار ۲۰۰ میلیثانیه روشن با ۲۰۰ میلیثانیه فاصله) و سپس یک مکث بلند ۱ ثانیهای داشته باشد.
// Write your code hereنمایش راهحل
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(200);
digitalWrite(LED_BUILTIN, HIGH);
delay(200);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}:::
خلاصه
- خروجی دیجیتال فقط دو حالت دارد: HIGH یعنی ۵ ولت و LOW یعنی صفر ولت.
pinModeحالت پین را تعیین میکند؛digitalWriteوdigitalReadآن را مینویسند یا میخوانند.- LED خارجی همیشه با مقاومت سری (رایج: ۲۲۰ اهم) به پین وصل میشود.
INPUT_PULLUPمقاومت داخلی را فعال میکند: حالت عادی پین HIGH و با فشردن دکمه LOW میشود.delayکل برنامه را متوقف میکند وmillis()جایگزین بدون توقف آن است.
دو حالت HIGH و LOW را کنترل میکنید؛ در درس بعدی میبینید چطور با ترفند PWM از همین پینهای دیجیتال، خروجی «شبهآنالوگ» و نور متغیر بسازید.