معرفی و تشریح قابلیتهای کتابخانه Metro در آردوینو
چندی است که پردازشهای پیچیده با میکروکنترلرها به آنها جایگاه ویژه ای در صنعت داده است و استفاده از یک میکرو پرقدرت برای چندین عملیات، کاری عادی تلقی میگردد.
شما لازم است در برنامهنویسی میکرو خود همزمان وضعیت چشمک زدن چند LED را مدیریت کنید، LCD را رفرش نمایید، منتظر اطلاعات سریال باشید و به ازای آن حتی یک صوت پخش کنید و حتی منتظر وضعیت میکروسویچ از نظر کاربر باشید! وظایفی که لازم است بصورت همزمان مدیریت شود.
امکان استفاده از چندین تسک مجزا باعث شده است کد نویسی و استفاده از این میکروها بسیار راحت و سریعتر گردد.
شاید برای شما مفید باشد: پروژه های آردوینو
در پست های قبلی سعی شد در مورد نصب سیستمعامل RTOS بر روی بردهای آردوینو توضیحات کاملی داده شود ولی در پست زیر سعی میکنیم یک لایبرری جالب و بسیار سبک جهت برخی کارهای خاص و ویژه را به شما معرفی کنیم که مطمئناً از آن لذت خواهید برد.
لایبرری METRO چیست؟
Metro طبق توضیحات داده شده در وب سایت آردینو یک لایبرری سبک و مفید است که میتواند جهت رویدادهای تکرارپذیر در آردوینو، کاربردی ساده و فوق العاده در زمانبندی های آن داشته باشد. برای نمونه:
- چشمک زدن همزمان LED
- هماهنگی همزمان سروو موتورها
- ارتباطات همزمان سریال
نصب و راهاندازی METRO:
حتماً با محیط نرم افزار آردوینو و گیت هاب آشنا هستید! گیت هاب همچون ناسا سایتی است که هزاران نفر سورسهای متن باز و شخصی خود را در آن میگذارند.
همانطور که در بالا گفتیم قرار است لایبرری Metro که در این وب سایت قرار گرفته را دانلود نماییم و به آردینو اضافه کنیم.
دانلود کتابخانه Metro:
جهت دانلود اینجا را کلیک کنید.
پس از دریافت این فایل وارد نرم افزار آردوینو شده و در منو مسیر زیر را دنبال کنید:
سپس فایل زیپ را انتخاب کنید:
کتابخانه Metro:
دست نگه دارید! قبل از شروع لازم است اندکی با فلسفه و کاربرد این کتابخانه آشنا شویم.
فرض کنید شما قرار است سه LED را با زمانبندی یکسان خاموش و روشن نمایید. کد زیر بهراحتی به شما این اجازه را خواهد داد.
شما میتوانید با تابع delay این کار را انجام دهید.
حال فرض کنید قرار است LEDها زمانبندی متفاوتی در چشمک زدن داشته باشند. وقتی شما به LED1 فرمان روشن شدن میدهید و میگویید یک ثانبه صبر کن، آن وقت نمیتوانید همزمان به LED2 بگویید 200 میلی ثانیه منتظر بمان! یا بهتر بگم خیلی پیچیده میشه!
زمانبندی و بهخصوص زمانبندیهای تکرارپذیر، بارها و بارها در برنامهنویسی میکروکنترلرها استفاده میشود و یکی از راهکارها استفاده از اینتراپت و تایمرها است.
ولی با استفاده از کتابخانه METRO این قضیه به راحتی میتواند سمت آردوینو اتفاق بیفتد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 اتفاق می افتد که در قسمت آینده بیشتر به آن خواهم پرداخت.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #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 آشنا کنیم.
عالی بود. من فکر میکردم که اردوینو قابلیت اجرای چند برنامه همزمان را نداره. ولی خب با روشهایی مث همین کتابخانه ای که به خوبی توضیح دادید میشه یه جورایی چند کار همزمان را انجام داد.
سلام
امکانش هست از این کتابخانه بر ای nodemcu 12E استفاده کرد یا حتما باید برد اردوینو هم کنار nodemcu کنار برد اردوینو باشه؟
من داخل پروژم فقط برد nodeMcu دارم آیا میتونم این کار را انجام بدم .؟
بله فکر میکنم مشکلی وجود نداشته باشه.
سلامی به گرمی افتاب به شما که به من علم می اموزید
از نحوه تدریستون خیلی خوشم اومد امیدوارم در هر زمینه ای موفق باشید
منتظر ادامه اموزش مترو هستم
متشکر
متشکر از همراهی شما دوست عزیز
خیلی خوب بود
عالییییییییییییی…
متشکرم از حسن توجه شما
خواهش میکنم دوست عزیز.
خوشحالم که مورد توجه شما قرار گرفته. به زودی در قسمت های آینده همراه شما دوستان عزیز خواهم بود…