multitasking در آردوینو- کتابخانه Metro – قسمت اول

0
134
multitasking در آردوینو
multitasking در آردوینو

معرفی و تشریح قابلیت‌های کتابخانه Metro در آردوینو

چندی‌است که پردازش‌های پیچیده با میکروکنترلرها به آن‌ها جایگاه ویژه ای در صنعت داده‌است و استفاده‌از یک میکرو پرقدرت برای چندین عملیات، کاری عادی تلقی میگردد. شما لازم‌است در برنامه‌نویسی میکرو خود همزمان وضعیت چشمک‌زدن چند LED را مدیریت کنید، LCD را رفرش نمایید، منتظر اطلاعات‌سریال باشید و به‌ازای آن حتی یک صوت پخش کنید و حتی منتظر وضعیت میکروسویچ از نظر کاربر باشید! وظایفی که لازم‌است بصورت همزمان مدیریت شود. امکان استفاده‌از چندین تسک مجزا باعث شده‌است کدنویسی و استفاده‌از این میکروها بسیار راحت‌و سریع‌تر گردد. در پست‌های قبلی سعی‌شد درمورد نصب سیستم‌عامل RTOS برروی بردهای آردوینو توضیحات کاملی داده‎‌شود ولی در پست‌زیر سعی میکنیم یک لایبرری جالب و بسیار سبک جهت برخی کارهای خاص و ویژه را به شما معرفی کنیم که مطمئناً از آن لذت خواهیدبرد.

لایبرری METRO چیست؟

Metro طبق توضیحات داده‌شده در وب‌سایت آردینو یک لایبرری سبک‌و مفید است که می‌تواند جهت رویدادهای تکرار‌پذیر در آردوینو، کاربردی ساده و فوق‌العاده در زمان‌بندی‌های آن داشته‌باشد.برای‌ نمونه:

  • چشمک زدن همزمان LED
  • هماهنگی همزمان سروو موتورها
  • ارتباطات همزمان سریال

نصب و راه‌اندازی METRO:

حتماً با محیط نرم‌افزار آردوینو و گیت‌هاب آشنا هستید! گیت هاب همچون ناسا سایتی است که هزاران نفر سورس‌های متن باز و شخصی خود را در آن میگذارند. همان‌طور که در بالا گفتیم قرار است لایبرری Metro که در این وب سایت قرار گرفته را دانلود نماییم و به آردینو اضافه کنیم.

دانلود کتابخانه Metro:

جهت دانلود اینجارا Metro-master کلیک کنید. پس از دریافت این فایل وارد نرم افزار آردوینو شده و در منو مسیر زیر را دنبال کنید:

دانلود کتابخانه Metro
دانلود کتابخانه Metro

 

سپس فایل زیپ را انتخاب کنید:

انتخاب فایل
انتخاب فایل

 

کتابخانه Metro:

قبل‌از شروع لازم‌است اندکی با فلسفه و کاربرد این کتابخانه آشنا شویم. فرض‌کنید شما قراراست سه LED را با زمان‌بندی یکسان خاموش‌و روشن نمایید. کد زیر به‌راحتی به شما این اجازه را خواهدداد. شما می‌توانید با تابع delay این کار را انجام‌دهید. حال فرض‌کنید قرار است LEDها زمان‌بندی متفاوتی در چشمک‌زدن داشته‌باشند. وقتی شما به LED1 فرمان روشن‌شدن میدهید و میگویید یک ثانیه صبر کن، آن‌وقت نمی‌توانید همزمان به LED2 بگویید ۲۰۰ میلی‌ثانیه منتظربمان! زمان‌بندی و به‌خصوص زمان‌بندی‌های تکرارپذیر، بارها و بارها در برنامه‌نویسی میکروکنترلرها استفاده می‌شود و یکی‌از راهکارها استفاده‌از اینتراپت و تایمرها است. ولی بااستفاده‌از کتاب‌خانه METRO این قضیه به‌راحتی می‌تواند سمت آردوینو اتفاق بیفتد.

short led=9, led2=10, led3=13;
void setup() {
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);

}

void loop() {
// Part 1
digitalWrite(led, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
// End Part 1
delay(500); // Or Another value
// Part 2
digitalWrite(led, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
//End Part 2
delay(500); // Or Another value

}

با واردکردن کتابخانه Metro و درنهایت واردکردن کلاس Metro به‌صورت کلاس Instance، شما شی‌های مورد‌نظر خود را تعریف می‌کنید و به آن شی‌ها مقداراولیه می‌دهید. (مثال‌زیر) حقیقت را عوض نکرده‌اید! شما هنوز هم دارید از حالت تک‌پردازشی استفاده می‌کنید. چون اگر دقت‌کنید همه‌چیز منظم و پشت‌سرهم اجرا می‌شود و اگر دیده‌باشید با کمی‌فاصله موارد Part 1 و هم‌چنین موارد Part 2 ازهم اجرا می‌شوند. انگار درحال دستوردادن خیلی سریع و پشت‌هم در کامندلاین باشید. در Metro ما با مقداردهی و تعریف‌کردن یک فیلد (برحسب میلی‌ثانیه) از جنس این کتابخانه میتوانیم آنرا در قالب Condition تعریف نماییم و در این صورت این شرط‌ها بدون هیچ تداخلی ازهم عبور کرده و ProtoThreading اتفاق می‌افتد که در قسمت آینده بیشتر به آن خواهم پرداخت.

مثال:

#include <Metro.h> //Include Metro Library

Metro metro1 = Metro(1000);
Metro metro2 = Metro(500);
Metro metro3 = Metro(1000); //Define Fields

void setup() {

}

void loop() {
if (metro1.check()){
//Do State1 Codes
}

if (metro2.check()){
//Do State2 Codes
}

if (metro3.check()){
//Do State3 Codes
}
}

 

درقسمت‌بعد سعی خواهیم‌کرد شما را باذکر مثال‌هایی بیشتر و کاربردی‌تر از کتابخانه Metro و انواع Threading آشنا کنیم.

 

 

منبع: سیسوگ

برای این مقاله نظر بگذارید:

لطفا دیدگاه خود را بنویسید
لطفا نام خود را وارد کنید