کتابخانه ها یکی از ابزارهای بسیار پرکاربرد در علوم رایانه و برنامه نویسی، به شمار می روند. به کمک این ابزار، از تولید مجدد کدهای یکسان جلوگیری شده و حجم برنامه ها به شدت کاهش می یابد. از طرفی دیگر، با تبدیل کدها به کتابخانه، می توان بدون نیاز به بازنویسی مجدد کدها، در پروژه های مختلف از کدها استفاده نمود. اگر تاکنون با بردهای آردویینو کار کرده باشید، حتما برای سنسورها و ماژول های مختلف، کتابخانه های مربوط به آن را استفاده نموده اید. از طرفی دیگر، در بسیار از مواقع نیاز است تا خود برای پروژه های مورد نظر، کتابخانه ای را تولید و توسعه دهید. در این آموزش ضمن معرفی و مزیت استفاده از کتابخانه ها، نحوه ساخت یک کتابخانه و استفاده از آن در پروژه ها را شرح خواهیم داد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.
تعریف کتابخانه و مزیت های آن
یکی از مهم ترین اصول برنامه نویسی، کاهش حجم کدها و جلوگیری از افزونگی بی مورد است. با کاهش حجم کدهای یک پروژه، فرآیند دیباگ تسریع یافته و کدها خواناتر خواهند شد. این موضوع در پروژه های بزرگ و تیمی که چندین واحد مختلف مشغول کار بر یک موضوع هستند، اهمیتی دوچندان می یابد. به کمک کتابخانه ها می توان از به کار بردن کدهای تکراری در پروژه های مختلف، جلوگیری نمود.
برای درک بهتر این موضوع، فرض کنید که یک قطعه جهت خواندن دیتا یک سنسور خاص، تهییه کرده اید. از طرفی دیگر، فرض کنید که این قطعه کد شما، شامل صدها خط می شود. با تبدیل قطعه کد به صورت فایل کتابخانه، دیگر نیاز به استفاده از سورس کد مربوط به سنسور در پروژه نبوده و تنها توابع به کار رفته استفاده می شوند. این امر سبب کاهش حجم کدها خواهد شد. از دیگر مزایای کتابخانه شدن کد ها، قابلیت استفاده در پروژه های آتی است. بدین ترتیب ضمن کاهش یافتن حجم کدها، خوانایی افزایش یافته و روال انجام پروژه تسریع خواهد یافت. در قسمت های بعدی، به نحوه ایجاد کتابخانه در آردویینو، خواهیم پرداخت. اما پیش از آن، از آنجاییکه زبان برنامه نویسی آردویینو در حقیقت زبان ++C است، در ابتدا مفهوم کلاس را به طور خلاصه بررسی کرده و در ادامه به نحوه ایجاد کتابخانه خواهیم پرداخت.
مفهوم کلاس و شی گرایی در زبان ++C
شی گرایی و مفهوم کلاس، یکی از مهم ترین مفاهیم زبان برنامه نویسی ++C بوده که در حقیقت وجه تمایز این زبان با جد خود، C در مفهوم کلاس دیده می شود. برای درک بهتر مفهوم کلاس در برنامه نویسی، یک شی، مثلا خودرو را در نظر بگیرید. این خودرو دارای یکسری قطعات نظیر چرخ، دنده، فرمان و… است. از طرف دیگر، خودرو به کمک قطعات خود، به سمت جلو، عقب، چپ، راست، با سرعت بالا، با سرعت کم و…. می تواند حرکت کند.
در زبان ++C، جهت نزدیک سازی هرچه بیشتر پیاده سازی کامپیوتری به واقعیت، از مفهوم کلاس استفاده می شود. همانطور که در شکل بالا مشاهده می کنیم، کلاس car دارای یکسری متغیر و تابع است. در اصطلاح، به متغیرها صفت و به توابع متد گفته می شود. متدها به کمک صفت ها، وظایف محوله را اجرا می کنند. به عنوان مثال، در کلاس car، متد forward به کمک صفت wheel، حرکت رو به جلوی خودرور را اجرا نماید.
جهت کار با یک کلاس، می بایست از آن کلاس یک نوع داده(شی) ایجاد کنید. یک شی از یک کلاس، تمامی خصوصیات آن کلاس نظیر متد و صفت را در خود ذخیره می کند. به کمک شی، می توانیم به متدها و صفت های آن کلاس، دسترسی داشته باشیم. برای تعریف یک نوع شی از کلاس، به صورت زیر عمل می کنیم.
car a; a.forward();
در قطعه کد فوق، یک شی از کلاس car ایجاد شده است. سپس در خط دوم به کمک این شی، تابع حرکت رو به جلو، فراخوانی می شود.
نحوه ایجاد کتابخانه در آردوینو
هر کتابخانه، با دو فایل اصلی، یکی با پسوند h. و دیگری با پسوند cpp. برای بردهای آردویینو تعریف می شود. در فایل با پسوند h. شرح توابع و در فایل cpp. سورس کدهای توابع قرار می گیرند. فرض کنید قصد ایجاد یک کتابخانه برای چهار عمل اصلی جمع، ضرب، تفریق و تقسیم را داریم. توابع این کتابخانه را به صورت زیر نام گذاری می کنیم و تعریف می کنیم.
در این قسمت، نوبت به ایجاد فایل h. برای کتابخانه می رسد. ما نام کتابخانه خود را calc تعیین کرده و همانطور که گفته شد، این فایل شرح توابع را به شکل زیر در خود جای می دهد.
#ifndef CALC_H #define CALC_H class calc { public: int sum(int a , int b); int diff(int c, int d); int div(int e, int f); int mul(int g, int h); }; #endif
برای ایجاد فایل h.، کافیست به کمک یک ویرایشگر متن، به عنوان مثال note pad و یا ++note pad فایلی را باز کرده و عبارات فوق را در آن قرار دهید. سپس این فایل را با نام calc.h ذخیره کنید. در رابطه با فایل فوق، کلاس calc به همراه توابع و متغیرهای آن تعریف شده اند. توجه داشته باشید که در فایل h.، تنها کلاس و توابع تعریف می شوند. برنامه نویسی و سورس کد آن، در فایل cpp. قرار می گیرد.
از دیگر نکات مهم فایل h.، خط ابتدایی آن است. از آنجاییکه ممکن است یک کتابخانه در برنامه، دوبار فراخوانی شود، جهت جلوگیری از بروز خطاهای احتمالی، کتابخانه مورد نظر یکبار می بایست define شود. در ادامه بحث کتابخانه، به سراغ فایل cpp. می رویم. همانطور که پیشتر نیز گفته شد، در این فایل، سورس کد اصلی توابع قرار می گیرد. بنابراین، از آنجاییکه کتابخانه نیز پیشتر در فایل h.، تعریف شده، بنابراین نیازی به تعریف مجدد آن نبوده و تنها توابع(متدها) به صورت زیر تعریف و برنامه نویسی می شوند.
#include "calc.h" int calc::sum(int a, int b){ return (a+b); } int calc::diff(int c, int d){ return (c-d); } int calc::div(int e, int f){ return (e/f); } int calc::mul(int g, int h){ return (g*h); }
مشابه نحوه ذخیره سازی فایل calc.h، کدهای فوق را در یک فایل notepad کپی کرده و فایل را به صورت calc.cpp ذخیره کنید. در رابطه با کد فوق، ابتدا می بایست کتابخانه خود را که نام calc.h برای آن تعریف کرده ایم، فراخوانی کنیم. سپس در ادامه، به تشریح هر یک از توابع(متدها) می پردازیم. به منظور برنامه نویسی توابع، مطابق استاندارد زبان ++c، ابتدا نوع تابع، سپس نام کلاس به همراه علامت :: و درنهایت تابع، تعریف می شود. تا اینجا، دو فایل اصلی کتابخانه، یکی calc.h و calc.cpp را ایجاد کردیم. در این مرحله، می بایست کتابخانه calc را جهت استفاده در آردویینو، تکمیل کنیم. به همین منظور، ابتدا یک فولدر به نام calc ایجاد کرده و دو فایل را درون این فولدر قرار دهید. د رنهایت این فولدر را در مسیر نصب آردویینو و در فولدر libraries قرار دهید. توجه داشته باشید که مسیر نصب آردویینو معمولا در درایو c قرار می گیرد.
اجرای برنامه و استفاده از کتابخانه
در این مرحله نوبت به استفاده از کتابخانه calc می رسد. همانطور که گفته شد، این کتابخانه ۴ تابع برای ۴ عمل اصلی حساب دارد. به کمک توابع(متد) این کتابخانه، جمع، تفریق، تقسیم و ضرب را بر روی دو ورودی هر تابع انجام داده و نتیجه را در سریال مانیتور، نمایش می دهیم.
#include "calc.h" //فراخوانی کتابخانه calc calc m; //ایجاد یک نمونه شی از کتابخانه به نام m void setup() { Serial.begin(9600); Serial.print("SUM OF THE 5 AND 6 IS: "); Serial.flush(); Serial.println(m.sum(5, 6)); //فراخوانی تابع(متد) جمع Serial.flush(); //**************************************************** Serial.print("DIFFERENCE BETWEEN THE 5 AND 6 IS: "); Serial.flush(); Serial.println(m.diff(5, 6)); //فراخوانی تابع(متد) تفریق Serial.flush(); //**************************************************** Serial.print("MULTIPLE OF THE 5 AND 6 IS: "); Serial.flush(); Serial.println(m.mul(5, 6)); //فراخوانی تابع(متد) ضرب Serial.flush(); //**************************************************** Serial.print("DIVISION OF THE 5 AND 6 IS: "); Serial.print(m.div(5, 6)); //فراخوانی تابع(متد) تقسیم Serial.flush(); //**************************************************** } void loop() { }
کدهای فوق را می توانید بر روی انواع مختلفی از بردهای آردویینو و ماژول های ESP اجرا کنید. با آپلود کدهای فوق بر روی برد خود، در سریال مانیتور خروجی محاسبات را بر روی دو عدد ۵ و ۶ مشاهده خواهید نمود.
وسایل مورد نیاز
جمع بندی
در این آموزش به نحوه ایجاد کتابخانه در آردویینو پرداختیم. همانطو رکه اطلاع دارید، کتابخانه ها یکی از ابزارهای بسیار کاربردی در پروژه های مختلف هستند. به کمک کتابخانه ها می توان از ایجاد کدهای تکراری جلوگیری کرد، حجم برنامه ها را کاهش داد و پروسه دیباگ را تسریع بخشید. ایجاد کتابخانه دارای الزاماتی بوده که در این آموزش به طور کامل به تشریح آن پرداخته ایم. همچنین، با ایجاد یک کتابخانه ساده، آن را در پروژه خود استفاده کرده و خروجی آن را در سریال مانیتور، مشاهده می کنیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.