آردوینو – قسمت ۲ – GPIO

راه ارتباطی میان هر میکروکنترلر با دنیای خارج از طریق پایه های GPIO یا General Purpose Input Output است. سیگنالهای ورودی و خروجی صرف نظر از نوع آنالوگ یا دیجیتال از این طریق با پردازنده و برنامه مرتبط می شوند. در این بین هر خانواده از میکروکنترلر رجیستر خاصی مخصوص این کار دارد. به عنوان مثال میکروکنترلرهای AVR سه رجیستر برای این منظور دارند که در تصویر ۱ نشان داده شده است.

اما اینکار نیازمند کار با رجیسترها و برنامه نویسی سطح پایین است و عموما برای برنامه نویسان مبتدی خسته کننده و گمراه کننده است. بنابراین بهتر است کار با ورودی و خروجی ها به صورت ساختاریافته و از طریق توابع باشد. در پلتفرم آردوینو به همین منظور توابعی وجود دارد که کار با GPIO را راحت کند. این توابع عبارتند از:
/* Your code... */
digitalWrite(pin, Value);
pinMode(pin, mode);
digitalRead(pin);
قبل از بررسی چند مثال با این توابع بهتر است اول با نام گذاری استاندارد پایه ها در آردوینو آشنا شویم. آردوینو برای استاندارد سازی پایه ها و راحتی ارجاع به آنها پایه ها را به صورت دیجیتال آنالوگ و پایه های ولتاژ و زمین تقسیم بندی کرده است. در تصویر نام گذاری استاندارد پایه ها نشان داده شده است.
همانطور که در تصویر ۲ نشان داده شده پایه های دیجیتال از D0 تا D19 هستن، پایه های آنالوگ A0 تا A5 و مابقی پایه ها Ground ولتاژ 3V و 5V و RESET هستند. بسیاری از پایه ها کاربرد چندگانه دارند و برخی کاربردهای مهم دیگر آنها هم اضافه شده مانند پایه D0 که به پایه RX واحد USART میکروکنترلر هم متصل است.
این نامگذاری موجب می شود که شما نیاز نداشته باشید به دنبال پیدا کردن اسم پایه میکروکنترلر خود باشید. در واقع این نام های ماکروهایی است که در برنامه به کار رفته و اشاره به یک پایه خاص از میکرو دارد. به عنوان مثال پایه A0 به ورودی ADC0 یا کانال اول ADC میکرو اشاره میکند.
حال که با نام گذاری استاندارد آشنا شدیم میتوانیم در غالب چندین مثال ساده درباره کار با توابع GPIO را بررسی کنیم. ساده ترین مثال که همیشه برای تست کارکرد یک میکروکنترلر استفاده می شود برنامه چشمک زن یا blink است.
void setup()
{
pinMode(13,OUTPUT);
}
void loop()
{
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
در این برنامه ساده از پایه ۱۳ که در آردوینو نانو به LED برد متصل است توسط تابع pinMode به صورت خروجی تعریف شده است. در واقع تابع pinMode تعیین جهت پایه های میکروکنترلر را انجام می دهد. این تابع ۲ ارگومان ورودی دارد که اولی باید شماره پایه GPIO یا ماکرو پیش تعریف شده آردوینو مانند نام گزاری تصویر ۲ باشد. در قسمت loop ابتدا فراخوانی تابع digitalWrite پایه شماره ۱۳ را ۱ می کند و در نتیجه LED روشن می شود. سپس تابع delay تاخیر به مدت ۵۰۰ میلی ثانیه ایجاد می کند. سپس تابع digitalWrite دوباره فراخوانی شده و اینبار LED را خاموش میکنند و دوباره ۵۰۰ میلی ثانیه صبر می کند و برنامه دوباره از اول اجرا می شود.
#define LED_PIN 13
#define BUTTON1_PIN 2
#define BUTTON2_PIN 3
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON1_PIN, INPUT);
pinMode(BUTTON2_PIN, INPUT);
}
void loop()
{
int button1State = digitalRead(BUTTON1_PIN);
int button2State = digitalRead(BUTTON2_PIN);
if (button1State == LOW && button2State == HIGH )
{
digitalWrite(LED_PIN, HIGH);
}
if (button2State == LOW)
{
digitalWrite(LED_PIN, LOW);
}
}
کنترل LED با دو کلید فشاری
این برنامه برای کنترل یک LED با استفاده از دو کلید فشاری طراحی شده است. در اینجا، عملکرد برنامه به صورت زیر توضیح داده شده است:
تعریف پایهها
- LED_PIN: شماره پایهای است که LED به آن متصل شده است (در اینجا پایه ۱۳).
- BUTTON1_PIN: شماره پایهای است که کلید اول به آن متصل شده است (در اینجا پایه ۲).
- BUTTON2_PIN: شماره پایهای است که کلید دوم به آن متصل شده است (در اینجا پایه ۳).
عملکرد برنامه
-
تابع setup
- پایه LED به عنوان خروجی تعریف شده است تا بتوان آن را روشن و خاموش کرد.
- پایههای کلید اول و دوم به عنوان ورودی تعریف شدهاند تا وضعیت آنها (فشرده یا غیرفشرده بودن) بررسی شود.
-
تابع loop
- وضعیت کلید اول و دوم به ترتیب از طریق
digitalRead
خوانده میشود و در متغیرهایbutton1State
وbutton2State
ذخیره میگردد. - اگر کلید اول فشرده شده باشد (
button1State == LOW
) و در همان زمان کلید دوم آزاد باشد (button2State == HIGH
)، LED روشن میشود. - در هر وضعیت دیگری، LED خاموش میشود.
- وضعیت کلید اول و دوم به ترتیب از طریق
نحوه عملکرد کلی
- وقتی کلید اول (متصل به پایه D2) فشرده میشود و در همان زمان کلید دوم (متصل به پایه D3) در وضعیت HIGH (آزاد) باشد، LED روشن میشود.
- اگر یکی از شرایط بالا برقرار نباشد (یعنی یا کلید اول فشرده نشده باشد یا کلید دوم در حالت LOW باشد)، LED خاموش باقی میماند.
این برنامه برای پروژههای ساده آموزشی و تمرین با ورودی/خروجی دیجیتال در آردوینو مناسب است.
دیدگاهتان را بنویسید