قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:334
قديم 31-03-2020, 07:24 PM المشاركة 1   
افتراضي الدرس الخامس عشر الدوال والاردوينو Arduino Functions Twitter FaceBook Google+



دورة برمجة الاردوينو : الدرس الخامس عشر
الدوال والاردوينو Arduino Functions


في هذا الدرس ، ستتعلم كيفية كتابة الدوال الخاصة بك واستخدامها في برامجك . يتم شرح بناء structure واستخدام الدوال بشكل كامل.
تم تناول الدوال بإيجاز في الدرس الأول حيث تعرفنا على بعض الحقائق الأساسية حول الدوال حيث تم ذكرها :
1) يجب أن يكون لكل دالة اسم فريد ،
2) يتبع اسم الدالة بأقواس ()
3) الدوال لها نوع إرجاع ، على سبيل المثال void
4) جسم الدالة محاط داخل أقواس الفتح والإغلاق {}.
سنبدأ بفحص بناء الدالة ثم نرى كيفية كتابة الدوال .

بناء الدالة The Structure of a Function
قبل أن يتم (يمكن) استخدام دالة في برنامج ، يجب إنشاؤها. الكود التالى هو مثال على دالة تم إنشاؤها لطباعة خط متقطع dashed line في Arduino IDE.

كود:
void DashedLine()
{
    Serial.println("----------------");
}

الكود أعلاه والذي ينشىء creates الدالة يسمى "تعريف الدالة" function definition . توضح الصورة أدناه مكونات الدالة .



1- اسم الدالة Function Name
عندما نقوم بإنشاء دالة ، يجب أن يكون لها اسم name. اصطلاح التسمية للدوال هو نفسه للمتغيرات:
• يمكن أن يتكون اسم الدالة من أحرف أبجدية (A to Z; a to z; 0 to 9) والشرطة السفلية (_).
• لا يبدأ اسم الدالة برقم number ، أي الأرقام من 0 إلى 9.
• يجب عدم استخدام اسم دالة هو نفس الكلمة الرئيسية للغة أو دالة موجودة.
ينتهي اسم الدالة بالأقواس (). لا يتم تمرير أي شيء إلى دالة المثال أعلاه ، لذلك تكون الأقواس فارغة. سيتم شرح تمرير القيم values أو البارامترات parameters إلى الدوال لاحقًا في هذا الدرس .


2- نوع الإرجاع Return Type
يجب أن يكون للدالة نوع إرجاع. لا ترجع دالة المثال أي شيء ، لذلك يوجد لها نوع إرجاع فارغ void. سيتم شرح إرجاع قيمة من دالة في الجزء التالي من هذا الدرس .

3- جسم الدالة Function Body
يتكون جسم الدالة من العبارات statements الموضوعة بين القوسين {}. تشكل العبارات وظيفة الدالة (ماذا ستفعل الدالة عندما يتم استدعاؤها).
عند استخدام دالة ، يقال أنها "تستدعى " "called". سنلقي نظرة على كيفية استدعاء دالة بعد ذلك.

استدعاء دالة Calling a Function
لاستخدام الدالة التي تم إنشاؤها أعلاه ، يجب استدعاؤها في البرنامج كما هو موضح في البرنامج أدناه.

كود:
void setup() {
  Serial.begin(9600);
  
  DashedLine();
  Serial.println("| Program Menu |");
  DashedLine();
}

void loop() {
}

void DashedLine()
{
  Serial.println("----------------");
}

في البرنامج أعلاه ، يتم إنشاء الدالة DashedLine() في أسفل البرنامج ثم يتم استدعاؤها مرتين في أعلى البرنامج كما هو موضح في الصورة أدناه.



لاستدعاء دالة ، استخدم اسم الدالة متبوعًا بأقواس فتح وإغلاق ( ) . أخيرًا ، قم بإنهاء العبارة التي تستدعي الدالة بفاصلة منقوطة ( ; ) .
قم بتحميل البرنامج إلى Arduino ثم افتح النافذة التسلسلية . يطبع البرنامج بعض النصوص في مربع كما هو موضح أدناه.



في المرة الأولى التي يتم فيها استدعاء الدالة ، فإنها تطبع الخط المتقطع الموضح في الجزء العلوي من الصورة. ثم تتم كتابة النص إلى نافذة جهاز العرض التسلسلي بواسطة العبارة الموجودة أسفل استدعاء الدالة . يتم استدعاء الدالة مرة أخرى لطباعة نفس الخط المتقطع الذي يكمل الصندوق.

لماذا استخدام الدوال Why Use Functions
الدالة المستخدمة في المثال أعلاه بسيطة للغاية ، لذلك لن يتم رؤية جميع مزايا استخدام الدوال على الفور.
إحدى مزايا استخدام الدوال هي أنها تتجنب الاضطرار إلى كتابة نفس الكود مرارًا وتكرارًا في البرنامج يوفر الوقت والذاكرة. في كل مرة يتم فيها استدعاء دالة ، فإننا نعيد استخدام الكود الذي تمت كتابته مرة واحدة فقط.

إذا كانت هناك حاجة إلى تعديل دالة ما ، فيجب إجراؤها مرة واحدة فقط وستدخل التعديلات حيز التنفيذ في كل مكان في البرنامج الذي يتم استدعاء الدالة . إذا لم يتم استخدام دالة ، فسيكون من الضروري تحديد مكان وتعديل كل مكان توجد فيه العبارات في البرنامج للقيام بمهمة معينة.

يمكن استخدام الدوال الوظائف لتقطيع (تكسير - تجزئة) break برنامج إلى أجزاء تجعله أكثر وحدات modular وأسهل في الفهم. يمكن إعادة استخدام الدوال في برامج الأخرى.

تمرير قيمة إلى دالة Passing a Value to a Function
في البرنامج أعلاه ، طول الخط الذي تطبعه الدالة يكون ثابت فى الدالة . إذا قمنا بتغيير النص الموجود في المربع ، فقد لا يتناسب مع المربع بشكل صحيح. يجب تعديل الدالة حتى تتمكن من معرفة حجم الخط الذي يجب رسمه.
يمكن تعديل الدالة أعلاه لتمرير قيمة value لها تخبرها بعدد الأحرف التي تصنع الخط الذي ترسمه.
يظهر البرنامج المعدّل أدناه.

كود:
 void setup() {
  Serial.begin(9600);
  
  // draw the menu box
  DashedLine(24);
  Serial.println("| Program Options Menu |");
  DashedLine(24);
}

void loop() {
}

void DashedLine(int len)
{
  int i;
  
  // draw the line
  for (i = 0; i < len; i++) {
    Serial.print("-");
  }
  // move the cursor to the next line
  Serial.println("");
}

يتم تعديل الدالة DashedLine() في البرنامج أعلاه بحيث يمكن تمرير قيمة عدد صحيح إليها. يجب أن يتألف الخط (السطر) line من 24 حرفًا ليتناسب مع نص القائمة الجديدة ، لذلك نمرر لها القيمة 24.

كود:
DashedLine(24);  // passing a value of 24 to the function

بالطبع يجب تعديل الدالة للتعامل مع القيمة التي يتم تمريرها إليها:

كود:
void DashedLine(int len)
{
  int i;
  
  // draw the line
  for (i = 0; i < len; i++) {
    Serial.print("-");
  }
  // move the cursor to the next line
  Serial.println("");
}

يجب أن تكون الدالة قادرة على قبول قيمة عدد صحيح يتم تمريره إليها. يتم إدراج نوع المتغير واسم المتغير بين قوسى الفتح والإغلاق بعد اسم الدالة .

كود:
void DashedLine(int len)

يمكننا الآن استخدام متغير العدد الصحيح len في جسم الدالة DashedLine() . سيحتوي المتغير على أي قيمة يتم تمريرها إليها عند استدعاء الدالة .
يستخدم جسم الدالة المتغير len في حلقة لطباعة العدد الصحيح من الشرطات التي تشكل الخط المتقطع لمربع القائمة.
يتم نقل المؤشر إلى السطر التالي في جهاز العرض التسلسلي عن طريق استدعاء Serial.println(""); بسلسلة فارغة.
بعد أن تقوم الدالة بتشغيل العبارة الأخيرة في جسمها ، يقال أنها "تعود أو ترجع" "return". عندما تعود إحدى الدوال ، يستمر تنفيذ البرنامج أسفل العبارة التي تستدعى الدالة - أي يتم تشغيل العبارة التالية لاستدعاء الدالة بعد ذلك.

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً سعيد قادر ( شكر العضو على هذه المشاركة )
اعجاب سعيد قادر ( أعجبته المشاركة )
اعلانات
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 08:43 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025