زمانبندی و اجرای به موقع فرایندها در برنامه ها امری حائز اهمیت است. زمانیکه پروژه ها پیشرفه شده وتعداد زیادی پروسه باید به طور همزمان روی یک برد اجرا شوند، زمانبندی بیش از پیش اهمیت خود را نمایش می دهد. جهت اجرای توابع به صورت زمانبندی شده، کتابخانه های مختلفی توسعه یافته اند. یکی از این کتابخانه ها، TimerEvent است. به کمک این کتابخانه می توان زمان Interval تعیین کرده و با تعریف تابع، بسته به زمان تعریف شده، تابع اجرا خواهد شد. در این آموزش به تحلیل و بررسی این کتابخانه کلیدی و کاربردی می پردازیم. مطابق رویه معمول، ابتدا به نصب کتابخانه خواهیم پرداخت. پس از این الزامات و نکات فنی کتابخانه را بررسی می کنیم. در نهایت به تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه می پردازیم. در ادامه تحلیل کتابخانه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نحوه عملکرد و زمانبندی کتابخانه TimerEvent
پیش از اینکه وارد بحث تحلیل کتابخانه شویم، به صورت اجمالی عملکرد کتابخانه TimerEvent را بررسی می کنیم. کتابخانه TimerEvent یک کتابخانه Run Interval است. به عبارت دیگر این کتابخانه می تواند دستورات کاربر را هر x ثانیه یکبار اجرا کند. به عنوان مثال با تنظیم زمان برای ۱۰۰۰ و تعریف یک تابع، کتابخانه هر یک ثانیه یکبار دستورات تابع را به اجرا در می آورد.
در کنار موارد بیان شده، به کمک این کتابخانه می توان چندین تابع را تعریف نمود. با تعریف چندین تابع، می توان هر یک با زمانبندی تعریف شده به اجرا در آورد. به طور مثال از این کتابخانه در یک سیستم لاگ و ارسال دیتا می توان استفاده کرد. در این سیستم برای افزایش عمر کارت SD و کاهش توان مصرفی در واحد مخابراتی می توان دو تابع تعریف کرد. یک تابع برای ذخیره داده در کارت SD و تابع دیگر برای ارسال داده در واحد مخابراتی است. با تنظیم زمان، هر یک از توابع سر موعد مقرر اجرا می شوند.
نصب کتابخانه TimerEvent
به منظور استفاده از کتابخانه، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.
مطابق فلش مشخص شده در تصویر فوق، در کادر جستجو عبارت TimerEvent را تایپ کنید. پس از چند لحظه با تصویر زیر رو به رو می شوید. در این مرحله، کتابخانه را با کلیک بر روی گزینه install، نصب کنید.
الزامات و نکات فنی کتابخانه TimerEvent
پس از نصب کتابخانه، نوبت به بررسی الزامات و نکات فنی می رسد. در ابتدا توجه داشته باشید که این کتابخانه به صورت نزم افزاری عمل می کند. بدین ترتیب بر روی کلیه معماری های مورد پشتیبانی پلتفرم آردوینو قابل اجراست. بدین ترتیب این کتابخانه روی بردهای آردوینو نظیر ESP8266 و یا معماری AVR نظیر آردوینو UNO قابل اجراست. در حقیقت این کتابخانه از تابع millis برای ایجاد تایمینگ استفاده می کند.
توابع کلیدی و کاربردی کتابخانه
پس از بررسی الزامات و نکات فنی، نوبت به تحلیل و بررسی توابع کلیدی و کاربردی می رسد. جدول زیر لیست توابع را به همراه ورودی ها و شرح هر تابع، نمایش می دهد.
شرح | ورودی | تابع | |||
این تابع در ورودی نخست خود مدت زمان Interval را برای اجرای تابع تعیین می کند. ورودی دوم نیز نام تابعی که قرار به اجراست را مشخص می کند. | ورودی اول تعیین زمان Interval
ورودی دوم تابع callback |
|
|||
این تابع تایمر را به طور کلی ریست می کند. بعد از این تابع باید زمانبندی از ابتدا تنظیم گردد. | بدون ورودی | void reset(); | |||
این تابع روال شمارش و اجرای Interval توابع را متوقف می کند. | بدون ورودی | void disable() | |||
این تابع تایمر متوقف شده را مجددا فعال می کند. | بدون ورودی | void enable() | |||
به کمک این تابع می توان پس از تنظیم زمان، مجددا زمان را تغییر داد. | ورودی جهت تعیین زمان Interval | void setPeriod( unsigned long myPeriod ) | |||
این تابع باید در تابع loop فراخوانی شود تا زمانبندی به شکل صحیح اجرا گردد. | بدون ورودی | void update() | |||
به کمک این تابع | بدون ورودی | bool isEnabled() |
اجرای یک نمونه برنامه
پس از بررسی توابع و تحلیل آن ها نوبت به اجرای یک نمونه برنامه می رسد. این برنامه سه تابع را تعریف کرده و بسته به زمان تعیین شده، آن ها را فراخوانی می کند.
#include <TimerEvent.h> //فراخوانی کتابخانه const unsigned int timerOnePeriod = 997; //تعیین زمان برای فراخوانی تابع شماره یک const unsigned int timerTwoPeriod = 1361; //مدت زمان برای فراخوانی تابع شماره ۲ const unsigned int timerThreePeriod = 3000; //مدت زمان برای فراخوانی تابع شماره ۳ // ایجاد سه شی از کلاس کتابخانه برای سه تابع //توجه: زمان به میلی ثانیه است. TimerEvent timerOne; TimerEvent timerTwo; TimerEvent timerThree; void setup(){ Serial.begin(9600); //تنظیم نام تابع و زمان فراخوانی timerOne.set(timerOnePeriod, timerOneFunc); timerTwo.set(timerTwoPeriod, timerTwoFunc); timerThree.set(timerThreePeriod, timerThreeFunc); } void loop(){ //بروز رسانی و اجرا timerOne.update(); timerTwo.update(); timerThree.update(); } // تابع تایمر شماره ۱ void timerOneFunc(){ Serial.println("TIMER ONE"); Serial.flush(); delay(5000); } // تابع تایمر شماره ۲ void timerTwoFunc(){ Serial.println("TIMER TWO"); Serial.flush(); } //تابع تایمر شماره ۳ void timerThreeFunc(){ Serial.println("TIMER THREE"); Serial.flush(); }
لوازم مورد نیاز
لینک خرید انواع برد ESP، کلیک کنید
لینک خرید انواع برد آردوینو، کلیک کنید
جمع بندی
در مجموعه آموزش های تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه، این قسمت را به کتابخانه EventTimer اختصاص دادیم. این کتابخانه کمک می کند تا تعدادی تابع را به صورت زمانبندی شده و به شکل Interval، اجرا کنیم. در این آموزش ابتدا به معرفی کتابخانه و مکانیزم آن پرداختیم. پس از آن نصب و الزامات فنی از نظر گذرانده شد. پس از آن به تحلیل و بررسی توابع کلیدی پرداختیم. در نهایت با اجرای یک مثال، نحوه استفاده از توابع در برنامه ها را مشاهده کردیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام ایا برروی همه اردوینو ها قابل اجراس؟
سلام
بله بر روی همه بردها قابل اجراست