نوشتن کتابخانه برای آردوینو (قسمت دوم)
نوشتن کتابخانه برای آردوینو (قسمت دوم)
جمعه, 29 دی 1396 ساعت 19:57
این آموزش توضیح میدهد که چگونه برای آردوینو یک کتابخانه بسازیم. این آموزش با یک طرح از کد flashing Morse شروع میکند و توضیح میدهد که چگونه عملکردش را به یک کتابخانه تغییر دهیم.
در قسمت اول این آموزش در "نوشتن کتابخانه برای آردوینو (قسمت اول)" فایل هدر کتابخانه مدنظر را ساختیم. اکنون به قسمتهای مختلف فایل منبع Morse.cpp میرویم.
در ابتدا تعدادی دستور #include میآید. اینها اجازه دسترسی بقیه کد را به توابع استاندارد آردوینو میدهد و فایل هدر خود را تعریف میکند:
#include "Arduino.h"
#include "Morse.h"
سپس سازنده میآید. دوباره این عمل توضیح میدهد که زمانی که کسی مثالی از کلاس شما بسازد، چه اتفاقی میافتد. در این مورد، کاربر مشخص میکند که میخواهد از کدام پین استفاده کند. ما پین را بهعنوآنیک خروجی پیکربندی میکنیم، آن را در یک متغیر خصوصی برای استفاده در دیگر توابع ذخیره میکنیم:
Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}
تعدادی دستور عجیب در این کد وجود دارد. اول اینکه Morse:: قبل از نام تابع آمده است. این دستور میگوید که تابع بخشی از کلاس Morse است. شما این را دوباره در دیگر توابع در کلاس میبینید. دومین چیز غیرعادی خط تیره در کنار اسم متغیر خصوصی ماست، _pin. درواقع این متغیر میتواند هر نامی که شما بخواهید را داشته باشد تا زمانی که با تعریف موجود در فایل هدر همخوانی داشته باشد. قرار دادن خط تیره قبل از اسم متغیر روش معمولی است که متغیرهای خصوصی را مشخص میکند و همچنین اسم را ازآنچه در تابع موردبحث آمده است متمایز میسازد (که در این مورد آن را از pin جدا میسازد).
سپس کد واقعی از طرح که شما آن را به کتابخانه تبدیل کردهاید میآید. این خیلی شبیه به قبل است با این تفاوت که Morse:: قبل از اسم توابع قرار میگیرد و _pin بهجای pin مینشیند:
void Morse::dot()
{
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}درنهایت بسیار رایج است که در بالای فایل منبع نیز کامنت بیاید. بیایید همهچیز را ببینیم:
/*
Morse.cpp - Library for flashing Morse code.
Created by David A. Mellis, November 2, 2007.
Released into the public domain.
*/
#include "Arduino.h"
#include "Morse.h"
Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}
void Morse::dot()
{
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}
و این همهچیزی است که شما نیاز دارید (چیزهای اختیاری دیگری نیز وجود دارد، اما ما بعداً درباره آنها صحبت میکنیم) اکنون ببینیم که چگونه از کتابخانه استفاده کنیم.
اول یک کتاب راهنمای Morse در زیرشاخههای کتاب راهنمای کتابخانههای مربوط به کتاب راهنمای sketchbook خود بسازید. کد Morse.h و Morse.cpp را به آن کتاب راهنما جابهجا و یا کپی کنید. اکنون محیط آردوینو راهاندازی کنید. از منو sketch>Import Library را بازکنید باید Morse را درون آن ببینید. کتابخانه با طرحهایی که از آن استفاده میشود کامپایل میشود. اگر به نظر میرسد کتابخانه ساخته نشده است اطمینان حاصل کنید که فایلها با .h و .cpp پایانیافتهاند (بدون هیچگونه افزودنی اضافی مانند .tet یا .pde)
اکنون ببینیم چگونه ما میتوانیم طرح قدیمی SOS خود را با استفاده از کتابخانه جدید شبیهسازی کنیم:
#include <Morse.h>
Morse morse(13);
void setup()
{
}
void loop()
{
morse.dot(); morse.dot(); morse.dot();
morse.dash(); morse.dash(); morse.dash();
morse.dot(); morse.dot(); morse.dot();
delay(3000);
}
تعداد کمی تغییر نسبت به طرح قدیمی وجود دارد (همچنین مقداری از کد به کتابخانه انتقال دادهشده است).
در ابتدا ما یک دستور #include به بالای طرح اضافه کردهایم. این موجب میشود تا کتابخانه مورس برای طرح در دسترس باشد و شامل کدها میشود و به برد فرستاده میشود. این به این معنی است که اگر شما دیگر به کتابخانه نیاز ندارید باید #include را پاککنید تا مقداری فضا ذخیره کنید.
ما اکنون یک مثال از کلاس Morse به نام morse ساختیم:
Morse morse(13);
وقتی این خط اجرا میشود (که درواقع این حتی قبل از تابع setup() اتفاق میافتد) سازنده کلاس Morse فراخوانده میشود و آرایهای که شما در اینجا آوردهاید را منتقل میکند (در این مورد فقط 13).
توجه داشته باشید که setup() ما اکنون خالی است، این به این دلیل است که فراخوانی pinMode() درون کتابخانه اتفاق میافتد. (زمانی که نمونه ساختهشده است).
در آخر، برای فراخوانی توابع dot() و dash() ما نیاز داریم که پیشوند morse. را به آنها بیفزاییم. (اسم مثالی که ما میخواهیم از آن استفاده کنیم). ما میتوانیم چند نمونه از کلاس Morse داشته باشیم، هرکدام از آنها روی پین خود ذخیرهشدهاند در این مثال در متغیر خصوصی _pin ذخیره میشوند. با فراخوانی یک تابع در یک نمونه خاص، ما مشخص میکنیم که کدامیک از متغیرهای مثال باید در طول فراخوانی یک تابع استفاده شود. اگر ما هر دو را داشته باشیم بهصورت زیر میشود:
Morse morse(13);
Morse morse2(12);
پس در یک فراخوانی morse2.dot()، -pin، 12 خواهد بود.
اگر شما طرح جدیدی امتحان کردید، احتمالاً متوجه شدید که هیچچیزی از کتابخانه ما توسط محیط شناختهشده نیست و بهصورت رنگی مشخصشده است. متأسفانه نرمافزار آردوینو نمیتواند بهطور خودکار چیزی را که شما در کتابخانه خود تعریف کردهاید شناسایی کند (هرچند این میتواند یک ویژگی خوب باشد)؛ بنابراین، شما باید اندکی به آن کمک کنید. به این منظور یک فایلی را به نام keywords.txt در کتاب راهنمای Morse ایجاد کنید. این باید مشابه زیر باشد:
Morse KEYWORD1
dash KEYWORD2
dot KEYWORD2
هر خط به نام یک کلیدواژه است که به دنبال آنیک tap آمده است (نه space) و بعد از یک نوع کلیدواژه دیگر آمده است. کلاسها باید KEYWORD1 باشند و رنگ آنها نارنجی است. توابع باید KEYWORD2 باشند و رنگ آنها قهوهای است. شما باید آردوینو را مجدداً راهاندازی کنید تا بتواند کلیدواژههای جدید را شناسایی کند.
این بسیار خوب است طرحی فراهم آورید تا مردم با استفاده از آن از کتابخانه شما استفاده کنند. برای انجام این کار، یک کتاب راهنمای مثالها را درون کتاب راهنمای Morse ایجاد کنید. سپس کتاب راهنمای شامل طرح را (بیایید آن را SOS بنامیم) که ما در بالا آن را نوشتیم به کتاب راهنمای مثالها منتقل و یا کپی کنید. (شما میتوانید طرح را با استفاده از فرمان Sketch> Show sketch Folder بیابید) اگر محیط آردوینو را مجدداً راهاندازی کنید یک کتابخانه Morse را درون منو File>Sketchbook>Examples شامل مثالهایتان ببینید. ممکن است شما بخواهید برای توضیح چگونگی استفاده از کتابخانه خود کامنتی بگذارید.
اگر شما میخواهید که یک کتابخانه کامل را بررسی کنید (با کلمات کلیدی و مثالها) میتوانید فایل زیر را دانلود کنید:
نظرات و سؤالات خود را با ما مطرح کنید. اگر کتابخانهای را به این روش نوشتید برای استفاده با ما هم در اشتراک بگذارید.
نظرات، پیشنهادات و انتقادات خود را برای بهتر شدن محتوای مطالب با ما در میان بگذارید...
ترجمه شده توسط تیم الکترونیک صنعت بازار | منبع: سایت arduino.cc
- ۹۶/۱۲/۰۴