قصد داریم برای آشنای با ورودی دیجیتال در آردوینو یک دکمه به یکی از پایه های آن وصل کنیم و برنامه ای بنویسیم که در صورت فشرده شدن دکمه یک LED که به یکی از پایه های خروجی متصل شده روشن شود. وقتی می گوییم ورودی دیجیتال یعنی این ورودی تنها می تواند یکی از دو مقدار High یا Low داشته باشد.

دکمه را به پایه 2 و LED را از طریق مقاومت 220 اهم به پایه 8 وصل می کنیم. مدار به شکل زیر است:

arduino button

برنامه به شکل زیر نوشته می شود:

int led = 8;
int button = 2;
int buttonValue = 0;
void setup() {
  pinMode(led, OUTPUT); 
  pinMode(button, INPUT);
}

void loop() {
  buttonValue = digitalRead(button);
  if (buttonValue == HIGH) {
    digitalWrite(led, HIGH); 
  }
  else {
    digitalWrite(led, LOW);
  }
  digitalWrite(led, LOW); 
}

کد از دو قسمت تشکیل شده است: setup و loop.

قبل از تابع setup سه متغیر led، button و buttonValue را مقداردهی اولیه کرده ایم.

در خط اول متغیری به نام led از نوع int با مقدار 8 را مقداردهی اولیه شده است. این متغیر برای ذخیره شماره پین متصل به LED استفاده می شود.

سپس دمتغیری به نام button از نوع int با مقدار 2 را مقداردهی اولیه شده است. این متغیر برای ذخیره شماره پین دکمه ای که به برد آردوینو متصل است استفاده می شود.

در خط بعد متغیری به نام buttonValue از نوع int با مقدار 0 را مقداردهی اولیه شده است. این متغیر برای ذخیره وضعیت دکمه استفاده می شود که می تواند HIGH یا LOW باشد.

در تابع setup از تابع pinMode برای پیکربندی پایه 8 به عنوان پایه خروجی و پایه 2 به عنوان پایه ورودی استفاده می شود. این بدان معناست که از پایه 8 برای ارسال سیگنال به LED و پایه 2 برای دریافت سیگنال از دکمه استفاده می شود.

در تابع loop از تابع digitalRead برای خواندن وضعیت دکمه متصل به پین 2 استفاده می شود. اگر دکمه فشار داده شود، دستور if اجرا می شود و تابع digitalWrite برای چرخاندن LED استفاده می شود. با تنظیم ولتاژ پایه 8 روی HIGH روشن کنید. اگر دکمه فشار داده نشود، عبارت else اجرا می‌شود و تابع digitalWrite برای خاموش کردن LED با تنظیم ولتاژ پایه 8 روی LOW استفاده می‌شود. سپس، تابع digitalWrite دوباره برای خاموش کردن LED با تنظیم مجدد ولتاژ پایه 8 روی LOW استفاده می شود. این حلقه به طور نامحدود تکرار می شود.

همان طور که می بینید کدهای مربوط به if و کدهای مربوط به else هم باید بین { } قرار بگیرند.

مقاومت پول آپ و پول داون

هنگامی که پایه IO به عنوان ورودی تنظیم می شود، پایه IO به حالت امپدانس بالا می رود، به این معنی که دیگر به درایور خروجی پین IO متصل نیست. این به این معنی است که 0 یا 1 نیست و ولتاژ آنالوگ روی پین قابل پیش بینی نیست و مستعد نویز خارجی خواهد بود.

بنابراین لازم است که مدار بالا را اصلاح کنیم تا با هر نویزی که دریافت می شود وضعیت پین ورودی تغییر نکند. به این منظور می توانیم از مقاومت های پول آپ و پول داون استفاده کنیم.

استفاده از مقاومت پول داون در ورودی آردوینو

در پیکربندی پول داون pull-down ورودی، پایه ورودی آردوینو با یک مقاومت خارجی معمولا 10 کیلو اهم به GND متصل می شود.

مدار قبل به این شکل اصلاح شده است:

بنابراین زمانی که دکمه فشرده نشده است پایه ورودی از طریق مقاومت به زمین متصل است و همیشه Low خواهد بود، اما زمانی که دکمه فشرده شود پایه مستقیما به تغذیه متصل شده و وضعیت آن High خواهد شد. برنامه تغییری نمی کند.

استفاده از مقاومت پول آپ در ورودی آردوینو

فرض کنید که می خواهیم دکمه را به جای تغذیه به زمین وصل کنیم و هر وقت که این دکمه فشرده شد پایه Low شود و برنامه این را تشخیص دهد و LED را روشن کند. بنابراین در حالت عادی وضعیت پایه باید High باشد. پس باید آن را از طریق یک مقاومت پول آپ pull-up به تغذیه متصل کنیم. اما این بار لازم نیست که از مقاومت خارجی استفاده کنیم. چرا که هر پین IO میکروکنترلر به کار رفته در آردوینو دارای یک مقاومت پول آپ داخلی است که می‌توان آن را با استفاده از یک ترانزیستور کوچک داخلی که آن را به VCC متصل می‌کند، فعال یا غیرفعال کرد.

بنابراین مدار به این شکل اصلاح می شود:

برای فعال کردن مقاومت پول آپ ورودی داخلی آردوینو برای یک پایه IO خاص مثلاً پایه 2، باید با استفاده از تابع pinMode حالت را INPUT_PULLUP تنظیم کنیم.

pinMode(2, INPUT_PULLUP);

بنابراین برنامه را به شکل زیر باید تغییر دهیم:

int led = 8;
int button = 2;
int buttonValue = 0;

void setup() {
  pinMode(led, OUTPUT); 
  pinMode(button, INPUT_PULLUP);
}

void loop() {
  buttonValue = digitalRead(button);
  if (buttonValue == LOW) {
    digitalWrite(led, HIGH); 
  }
  else {
    digitalWrite(led, LOW);
  }
}

جمع بندی

در این قسمت با نحوه تعریف پایه های آردوینو به عنوان ورودی دیجیتال آشنا شدیم. همچنین برای جلوگیری از نویز از مقاومت پول داون خارجی و پول آپ داخلی استفاده نمودیم. بنابراین بعد از این قسمت می توانیم انواع ورودی های دیجیتال مانند دکمه و شاسی و خروجی مقایسه گر و … را به آردوینو متصل نموده و برنامه مرتبط با خواندن آن را بنویسیم.