الأربعاء، 11 نوفمبر 2015

مكتبات الاردوينو | Arduinno Libraries - الجزء الاول

مكتبات الاردوينو | Arduino Libraries


ما هي مكتبات الاردوينو البرمجية؟



توضح هذه التدوينة كيفية صنع مكتبه اردوينو، تبدأ سكيتش لعمل اضاءة إشارة مورس (flashing Morse code) وتوضيح كيفية تحويل الدوال الى مكتبة. وهذا يتيح لأناس اخرين سهولة استخدام الشفرات البرمجية التي قمت بكتابتها وكذلك سهولة اجراء التحديثات لتحسين مكتبة الاردوينو الخاصة بك. 
* لمزيد من المعلومات،حول كيفية صناعه مظهر اردوينو أنظر API Style Guide خاص بمكتبتك.
نبدأ بـ سكيتش يعمل كـ شفرة مورس (Morse code) بسيطة:
int pin = 13;

void setup()
{
  
pinMode(pin, OUTPUT);
}

void loop()
{
  dot(); dot(); dot();
  dash(); dash(); dash();
  dot(); dot(); dot();
  
delay(3000);
}

void dot()
{
  
digitalWrite(pin, HIGH);
  
delay(250);
  
digitalWrite(pin, LOW);
  
delay(250);
}

void dash()
{
  
digitalWrite(pin, HIGH);
  
delay(1000);
  
digitalWrite(pin, LOW);
  
delay(250);
}

إذا شغلت السكيتش، سيضيئ المصباح كشفرة (SOS)على الرأس(pin) رقم 13 في لوح الاردوينو.
السكيتش يحتاج الى أجزاء صغير مختلفة لكي يصبح مكتبة متكاملة. 
أولاً لدينا الـdot()والـ dash() دوال تجعل المصباح يوميض, 
ثانياً يوجد ledPin كمتغير تستخدمه الدالة لمعرفه الرأس المستخدم.
 واخيراً استدعاء pinMode() كدالة تعرف الرأس كمخرج.

لنتعلم كيفية تحويل السكيتش الى مكتبة!


تحتاج على الأقل ملفين لأنشاء مكتبة: ملف الهيدر(header) (امتداد الملف ".h") وملف المصدر(source) وبالامتداد (.ccp
ملف الهيدر يضم التعريفات للمكتبة: بالواقع قائمة بكل شيء موجود داخل المكتبة؛ بينما ملف المصدر يضم الشفرة البرمجية(السكيتش). إذا لنطلق اسم (Morse) على مكتبتنا لذلك ملف الهيدر سيكون بالشكل التالي Morse.h لنلق نظره لما سيتضمن ربما سيبدو غريب بعض الشيء في البداية لكن سيكون لديك الحس لكيفيه العمل حالما تلاحظ تعامله مع ملف المصدر.
قلب ملف الهيدر يتكون من سطر لكل داله في المكتبة، منظمة على شكل فئات بحسب المتغيرات التي تحتاجها:
class Morse
{
  
public:
    Morse(
int pin);
    
void dot();
    
void dash();
  private:
    
int _pin;
};


(الفئة class) هي ببساطة عبارة عن مجموعة من الدوال والمتغيرات التي تحفظ معا في مكان واحد. يمكن أن تكون هذه الدوال والمتغيرات العامة،بمعنى إمكانية الدخول لها من قبل المستخدمين لمكتبتك ,او خاصة أي بمعنى إمكانية الدخول من الفئه نفسها فقط .لكل فئة دالة خاصه تسمى (constructor) المنشئ  والتي تستخدم لأنشاء مثيل للفئة .المنشئ يحمل نفس اسم الفئة . 
أنت بحاجة إلى بضعة أشياء أخرى في ملف الرأس. واحد هو عبارة #include الذي يمنحك حق الوصول إلى أنواع قياسية وثوابت اللغة اردوينو (وهذا يتم تلقائياً إضافة إلى اسكتشات العادية، ولكن ليس للمكتبات). يبدو أن هذا (يذهب فوق تعريف الفئة التي تعطى سابقا):
#include "Arduino.h"
وأخيرا فمن الشائع ان يختتم ملف الهيدر كله في بشكل غريب.
#ifndef Morse_h
#define Morse_h

// the #include statment and code go here...

#endif

أساسا، وهذا ما يمنع مشاكل إذا كان شخص ما عن طريق الخطأ ضمن  #include المكتبة الخاصة بك مرتين.
وأخيراً، يمكنك عادة وضع تعليق في الجزء العلوي من المكتبة باسمها، ووصف مختصر لما تقوم به، الكاتب، والتاريخ، والترخيص.
دعونا نلقي نظرة على ملف الهيدر(header) كاملة:
/*
  Morse.h - Library for flashing Morse code.
  Created by David A. Mellis, November 2, 2007.
  Released into the public domain.
*/

#ifndef Morse_h
#define Morse_h

#include "Arduino.h"

class Morse
{
  
public:
    Morse(
int pin);
    
void dot();
    
void dash();
  private:
    
int _pin;
};

#endif
الآن دعونا نذهب في اعماق أجزاء مختلفة من الملف المصدر، Morse.cpp.
ويأتي أولاً بضع عبارات #include. وهذه تعطي صلاحية الولوج إلى دوال اردوينو القياسية، والى التعاريف الواردة في ملف الرأس الخاص بمكتبتك:
#include "Arduino.h"
#include "Morse.h"

ثم تأتي بعد ذلك المنشئ.مرة أخرى، وهذا يفسر ما يجب أن يحدث عند أي شخص يقوم بإنشاء مثيل للفئة الخاصة به. وفي هذه الحالة، يحدد المستخدم رقم pin الذي يودون استخدامه. نحن تنسمي pin كمخرج  ونحفظه كمتغير خاصة لاستخدامه في دوال أخرى:
Morse::Morse(int pin)
{
  
pinMode(pin, OUTPUT);
  _pin = pin;
}

وهناك بضعة أشياء غريبة في هذه الشفرة. 
الأول هو Morse:: قبل اسم الدالة. هذا يقول أن الدالة جزء من فئة Morse سترى هذا مرة أخرى في الدوال الأخرى في الفئة.
 والشيء الثاني الغير طبيعي هو تسطير أسفل السطر underscore باسم المتغير الخاصة بنا، _pin. يمكن أن يكون هذا المتغير في الواقع أي اسم تريده، طالما أنه يطابق التعريف في ملف الرأس.
إضافة تسطير أسفل سطر(underscore) بداية الاسم بمثابة وضع اتفاقية مشتركة لتوضيح المتغيرات التي هي متغيرات خاصة، وأيضا لتمييز الاسم (كما في حالة 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);
}
وهذا هو كل ما تحتاجه (هناك بعض الأشياء الاختيارية الأخرى جميلة، ولكن سوف نتحدث عن ذلك في وقت لاحق).

كيفية استخدام المكتبة,هذا ما سنتعرف علية في الجزء الثاني من هذه التدوينة.

هناك تعليقان (2):