الأحد، 30 أغسطس 2015

الدوال في لغه الاردوينو | Functions



الدوال

هذا الموضوع (دوال لغه الاردوينو) هو احد مواضيع سلسلة "اساسات الاردوينو".
بتجزئة الكود البرمجي الى دوال يتيح للمبرج صناعة وحدات عبارة عن مقاطع من الكود البرمجي والتي بدورها تنفذ مهمة معرفه ومن ثم الرجوع الي نفس المكان الذي استدعيت منه ما تسمى بالدالة.
بالنسمة للمبرمجين الذين اعتادوا على استخدام الأساسيات, فالدوال في الاردوينو توفر(وتمدد)الفائدة من استخدام الروتين الفرعي.

توحيد أجزاء الشفرات البرمجية الى دوال لها بعض الفوائد:

·         الدوال تساعد المبرمج ان يبقى منتظم. وهذا يساعد على تصور البرنامج.
·         الدوال تقنن عمل واحد في مكان واحد لذلك أن دالة فقط تحتاج التفكير والمعالجة مرة واحدة.
·         وهذا أيضا يقلل من فرص الأخطاء في التعديل، إذا احتاج الكود البرمجي للتغيير.
·         الدالات تجعل اجمالي كود الاردوينو أصغر وأكثر إحكاما لان مقاطع الشفرات البرمجية يمكن اعاده استخدامها مرات عديدة.
·         أنها تجعل من السهل على إعادة استخدام الشفرات البرمجية في البرامج الأخرى من خلال جعلها أكثر وحدات، وكأثر جانبي جيد، أن استخدام الدوال يجعل الشفرة أكثر قابلية للقراءة.
هناك نوعان من الدوال المطلوبة في برنامج الاردوينو، setup () loop (). يجب وضع الدوال الاخرى خارج اقواس هذين الدالتين.
وكمثال على ذلك، سوف نقوم بإنشاء دالة بسيطة لمضاعفة رقمين.
Example


لـ "استدعاء" دالة المضاعفة البسيطة خاصتنا، نمرر معاملاتها لنوع البيانات المتوقع.
void loop(){
int i = 2;
int j = 3;
int k;

k = myMultiplyFunction(i, j); 
// k now contains 6
}
تحتاج دالتنا أن تصرح خارج أي دالة أخرى، وذلك "myMultiplyFunction ()" يمكن أن تذهب إما فوق أو تحت الدالة "loop ()".
ان برنامج الاردوينو بأكمله سيبدو هكذا:
void setup(){
  
Serial.begin(9600);
}

void loop() {
  
int i = 2;
  
int j = 3;
  
int k;

  k = myMultiplyFunction(i, j); 
// k now contains 6
  
Serial.println(k);
  
delay(500);
}

int myMultiplyFunction(int x, int y){
  
int result;
  result = x * y;
  
return result;
}

 مثال آخر

هذه الدالة سوف تقرا متحسس خمسة مرات بواسطه الدالanalogRead() وتحسب متوسط القراءات الخمسة. بعد ذلك فأنها تحجّم البيانات الى ( 8 bits) (0-255) , وتقلبها, وإعادة تحويل النتيجة المقلوبة.
int ReadSens_and_Condition(){
  
int i;
  
int sval = 0;

  
for (i = 0; i < 5; i++){
    sval = sval + 
analogRead(0);    // sensor on analog pin 0
  }

  sval = sval / 5;    
// average
  sval = sval / 4;    
// scale to 8 bits (0 - 255)
  sval = 255 - sval;  
// invert output
  
return sval;
}
لـ استدعاء دالتنا , فقط نعين لها متغير.
int sens;

sens = ReadSens_and_Condition();


هناك 5 تعليقات: