کتابخانه ها نقشی مهم و اساسی در توسعه پروژه های آردوینو بازی می کنند. به کمک کتابخانه ها سرعت توسعه پروژه ها افزایش می یابد. چراکه به جای نوشتن مجدد کدها، آن ها را یکبار نوشته و چندین بار استفاده می کنیم. این درحالیست که در بسیاری از موارد، برخی از محاسباتی که قصد انجام آن را داریم، پیشتر توسط افراد به صورت کتابخانه توسعه یافته اند. یکی از کتابخانه های کاربردی، کتابخانه CountDown.h یا شمارش معکوس است. به کمک این کتابخانه می توان شمارش معکوس در برنامه ها ایجاد نمود. در مجموعه آموزش های تحلیل و بررسی کتابخانه های آردوینو، این آموزش را به کتابخانه شمارش معکوس اختصاص می دهیم. در ادامه این آموزش با مرجع تخصصی کتابخانه آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نصب کتابخانه CountDown.h
به منظور استفاده از کتابخانه CountDown.h، ابتدا می بایست آن را نصب کنیم. در این قسمت به نصب کتابخانه سنسور شتاب سنج با جستجو در مخازن آردوینو می پردازیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید.
مطابق فلش مشخص شده در تصویر فوق، در کادر جستجو عبارت CountDown.h را تایپ کنید. پس از چند لحظه با تصویر زیر رو به رو می شوید. در این مرحله، کتابخانه مشخص شده با کادر قرمز رنگ را با کلیک بر روی گزینه install، نصب کنید.
الزامات فنی در راه اندازی کتابخانه CountDown.h
کتابخانه شمارش معکوس بر مبنای شمارنده داخلی آردوینو، millis و micros بنا شده است. بنابراین انتظار می رود که این کتابخانه روی کلیه بردهای مورد پشتیبانی آردوینو، قابل اجرا باشد. در رابطه با شمارش، در نظر داشته باشید که تابع millis پس از ۴۹ روز شمارش مداوم، ریست شده و از ابتدا به اجرای برنامه می پردازد. در این کتابخانه شما می توانید مبنای شمارش را تعیین کنید. این شمارش می تواند به صورت روز و دقیقه و ثانیه و یا دقیقه باشد. در حالت نخست ۴۹ روز و در حالت دقیقه، ۷۰ دقیقه بیشینه مقدار مجاز برای شمارش است. در ادامه به بررسی توابع کلیدی و کاربردی این کتابخانه می پردازیم.
توابع کلیدی کتابخانه CountDown.h
در این قسمت به بررسی توابع کلیدی و کاربردی کتابخانه شمارش معکوس می پردازیم. توجه داشته باشید که در این کتابخانه، ورودی توابع از سمت چپ به راست ورودی اول، ورودی دوم و…. نام گذاری می شوند. جدول زیر شرح توابع را نمایش می دهد.
شرح | ورودی ها | تابع |
این تابع تابع سازنده کلاس کتابخانه است. ورودی این تابع دقت شمارش را تعیین می کند. این دقت دارای ورودی های معتبر به شرح زیر است:
MICROS:میکرو ثانیه MILLIS: میلی ثانیه SECONDS: ثانیه MINUTES: دقیقه توجه: مقدار پیشفرض میلی ثانیه است. |
ورودی از نوع شمارشی با نام رزولوشن | CountDown(const enum Resolution res = MILLIS) |
این تابع هم رزولوشن شمارش را تعیین می کند. به کمک این تابع می توانید حین اجرای برنامه، رزولوشن شمارش را تغییر دهید. ورودی ها دقیقا همان ورودی های تابع مرحله قبل هستند. مقدار پیشفرض هم میلی ثانیه است. | ورودی از نوع شمارشی با نام رزولوشن | void setResolution(const enum Resolution res = MILLIS) |
به کمک این تابع شمارش معکوس آغاز می گردد. شمارش بر مبنای رزولشن تعیین شده توسط کاربر اجرا می گردد. ورودی این تابع زمان شمارش معکوس را تعیین می کند. | ورودی از نوع بدون علامت ۳۲ بیتی | bool start(uint32_t ticks) |
به کمک این تابع شمارش را می توان آغاز کرد. این شمارش از روز، ساعت، دقیقه و ثانیه که در ورودی قرار می گیرد، آغاز می گردد.
توجه: برای این تابع، رزولشن بر مبنای ثانیه تعیین گردد.
|
ورودی اول از نوع بدون علامت برای تعیین روز
**************** ورودی دوم از نوع بدون علامت برای تعیین ساعت ************ ورودی سوم از نوع بدون علامت برای تعیین دقیقه ************** ورودی چهارم از نوع بدون علامت برای تعیین ثانیه
|
bool start(uint8_t days, uint16_t hours, uint32_t minutes, uint32_t seconds) |
به کمک این تابع شمارش را می توان آغاز کرد. این شمارش از روز، ساعت و دقیقه که در ورودی قرار می گیرد، آغاز می گردد.
توجه: برای این تابع، رزولشن بر مبنای دقیقه تعیین گردد.
|
ورودی اول از نوع بدون علامت برای تعیین روز
**************** ورودی دوم از نوع بدون علامت برای تعیین ساعت ************ ورودی سوم از نوع بدون علامت برای تعیین دقیقه
|
bool start(uint8_t days, uint16_t hours, uint32_t minutes); |
این تابع شمارش را متوقف می کند. | بدون ورودی | void stop(); |
این تابع مدت زمان باقی مانده تا اتمام شمارش را در خروجی قرار می دهد. | بدون ورودی | uint32_t remaining(); |
به کمک این تابع می توان وضعیت شمارش را بررسی نمود. در صورتیکه شمارش در حال اجرا باشد، خروجی true خواهد شد. | بدون ورودی | bool isRunning(); |
پس از تحلیل و بررسی توابع کلیدی، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعد مربوط به این موضوع است.
اجرای یک نمونه برنامه
پس از بررسی توابع، به اجرای یک نمونه برنامه می پردازیم. توجه داشته باشید که این کتابخانه زمان شمارش را در ورودی از شما دریافت کرده و شروع به شمارش رو به پایین از زمان تعیین شده توسط شما، می نماید. در این برنامه، برای مدت ۱۰ ثانیه برنامه شروع به شمارش می کند.
#include "CountDown.h" CountDown CD(CountDown::SECONDS); //ایجاد یک شی از کتابخانه و تعیین رزولوشن بر مبنای ثانیه uint32_t start, stop; //متغیر جهت ذخیره زمان شروع و پایان شمارش void setup() { Serial.begin(115200); delay(300); Serial.println("starting..."); Serial.flush(); CD.start(10); //شمارش برای ۱۰ ثانیه Serial.println(start); while (CD.remaining() > 0 ) { Serial.print(millis()); Serial.print("\t"); Serial.println(CD.remaining() ); delay(100); } Serial.println("done..."); } void loop() { }
لوازم متناسب با کتابخانه
جمع بندی
زمانبندی یکی از مهم ترین و پرکاربردترین پردازه ها در پروژه های مختلف به شمار می رود. یکی از انواع مهم شمارش و زمانبندی، زمانبندی معکوس است. در این حالت، شمارش از زمان تعیین شده، رو به پایین آغاز شده تا به صفر برسد. در این آموزش به تحلیل و بررسی کتابخانه CountDown.h پرداختیم. این کتابخانه امکان شمارش به صورت موازی با برنامه اصلی و معکوس را فراهم می آورد. بدین ترتیب این کتابخانه بدون ایجاد توقف در برنامه، شروع به شمارش رو به پایین می نماید. این کتابخانه قادر است تا شمارش را به صورت دقیقه، ثانیه و حتی روز و ساعت از کاربر دریافت نماید. در این آموزش به تحلیل و بررسی این کتابخانه کاربردی پرداختیم. مطابق رویه معمول آموزش های کتابخانه ای، ابتدا به نصب آن پرداختیم. سپس الزامات و نکات فنی را مورد مطالعه قرار دادیم. پس از این مرحله، به تحلیل و بررسی توابع کلیدی و کاربردی کتابخانه پرداختیم. در نهایت با ارائه مثالی، به نحوه استفاده از توابع در برنامه ها، پرداختیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
آقا دمتون گرم . میخواستم سایتای خارجکی را برا پیدا کردن همچین کتابخونه ای بگردم خوب شد که اول فارسی سرچ کردم….
سپاس فراوان….
سلام
خوشحالم که مفید بوده