السبت، 11 أكتوبر 2014

الدوال Functions عبارة عن مجموعة من الاوامر تكتب في رأس البرنامج او اخرة ويتم استدعاؤة في جسم البرنامج body
فائدة الدوال انها
  1.  تنظم البرنامج
  2. تجعل تعقب الاخطاء سهلا
  3. يظهر البرنامج بصورة احترافية
  4. تسهل عليك البرمجه حيث انك تقسم البرنامج الي عدة دوال و تستدعي الدالة التي تريدها في جسم البرنامج.
  5. توفر عليك الوقت فلو كان هناك مجموعة من الاوامر تتكرر كثيرا في البرنامج من الافضل ان تضعها في دالة وتعطيها اسما مناسبا ثم تستدعيها كلم اقتضت الحاجه لذلك مما يوفي في الوقت فلن تحتاج الي كتابة الاكواد مره اخري و كذلك توفر في  حجم البرنامج.
  6. تسهل عليك وعلي غيرك قراءة الكود حيث يظهر الكود بطريقه مرتبه ومتسلسله ومنظمه.
تسمي ال Functions بعدة اسماء اخري procedure, method, or routine فهذه الطريقة شائعة في جميع لغات البرمجه وهي طريقك لاحتراف البرمجه بشكل عام لذا من الان فصاعدا اعتمد علي استخدام الدوال في برامجك.
في المثال السابق انشأنا داله اسمها blinkLed () وهي من النوع الذي لا يستقبل قيمة ولا يرجع قيمة كما سنعرف لاحقا في هذه الدالة يقوم باطفاء وتشغيل ليد كل ثانية وفي جسم البرنامج في دالة loop ()  قام باستدعاء دالة blinkLed() دون الحاجه الي تكرار الاوامر.

شكل الداله
                                                      تنقسم الدوال الي اربع اقسام
  1. دالة لا تستقبل متغير ولا ترجع قيمة
  2. دالة  تستقبل متغير ولا ترجع قيمة
  3. دالة لا تستقبل متغير و ترجع قيمة
  4. دالة  تستقبل متغير و ترجع قيمة

  1. دالة لا تستقبل متغير ولا ترجع قيمة
void LedBlinking(){                
  digitalWrite (13,HIGH);
  delay (50);
  digitalWrite (13,LOW);
  delay (50);
}
void setup() {}
void loop () {
  LedBlinking ();
}

2- دالة  تستقبل متغير ولا ترجع قيمة
في هذا المثال سوف نجعل رقم البورت يعتمد علي متغير يمرر الي الدالة
void LedBlinking(int PinNum){
  digitalWrite (PinNum,HIGH);     
  delay (50);
  digitalWrite (PinNum,LOW);
  delay (50);
}
void setup() {}
void loop () {
  LedBlinking (13);
}

3- دالة لا  تستقبل متغير و ترجع قيمة
في هذا المثال سوف يتم قراءة قيمة حساس وارجاع قيمته
int readSensor() {
int sensorValue = 0;
for (int i=0; i<5; i++) {
sensorValue = sensorValue + analogRead(A0);
delay(10);
}
sensorValue = map(sensorValue, 0, 5115, 0, 255);

return sensorValue;
}
int x;
void setup(){
   Serial.begin(9600);
 }
 
void loop () {
  x= readSensor();
}
مثال اخر
---------------------------------
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;
 }

To call our function we just assign it to a variable.
int sens;

sens = ReadSens_and_Condition();
4- دالة لا  تستقبل متغير و ترجع قيمة
مثال1: حساب مساحة الدائرة

في هذا المثال سوف ننشئ دالة تستقبل نصف قطر دائرة ثم ترجع مساحة الدائرة
نوع المتغير الذي تستقبله وهو نصف قطر الدائرة من النوع float
نوع المتغير الذي يتم ارجاعه وهو مساحة الدائرة من النوع float


float CircleArea (float r){
  float area;                                    نعرف متغير وهو مساحة الدائرة
  const float pi=3.14;                   نعرف ثابت باي
  area = pi* r * r ;                          نحسب مساحة الدائرة
  return area;                                 نرجع مساحة الدائرة
}
float CArea;
void setup(){
   Serial.begin(9600);
 }
void loop () {
  CArea= CircleArea (5.5);          نستعدي دالة حساب مساحة الدائرة ونمرر لها قيمة نصف القطر
  serial.print ln (CArea);
delay(500);
}

مثال2: برنامج حاصل ضرب رقمين X * Y

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;
 }

أقسام المدونة

أرشيف المدونة

المشاركات الشائعة

آخر التعليقات