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

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:333
قديم 23-03-2020, 12:45 PM المشاركة 1   
افتراضي دورة برمجة الاردوينو : الدرس الثانى : الحلقة الرئيسية Main Loop لبرنامج الاردوينو Twitter FaceBook Google+



دورة برمجة الاردوينو : الدرس الثانى :
الحلقة الرئيسية Main Loop لبرنامج (اسكيتش) الاردوينو واستدعاء الدوال Calling Functions :

يوضح هذا الدرس ما هي الحلقة loop في البرمجيات وكيف تعمل الحلقة الرئيسية من برنامج (سكيتش) Arduino.
تقوم الدالة function في البرنامج (الاسكيتش) بمهمة ما (أي تؤدي وظيفة function). نقول إننا "نستدعى دالة " عندما نستخدم دالة لأداء مهمتها المحددة.

الحلقة الرئيسية The Main Loop :
كما هو موضح في السابق ، يتكون برنامج (سكيتش) الاردوينو من دالتين رئيسيتين تسميان setup() و loop() . الدالة loop() هي الحلقة الرئيسية في برنامج (سكيتش) الاردوينو. بعد تنفيذ العبارات التي تحتاج فى تشغيلها لمجرد مرة واحدة والانتهاء من تنفيذها في الدالة setup() ، يبدأ تنفيذ البرنامج في الدالة loop() .
بمجرد بدء تنفيذ البرنامج في الحلقة الرئيسية ، سيتم تنفيذ العبارات في الحلقة الرئيسية بشكل مستمر حتى يتم إيقاف تشغيل Arduino أو إعادته (ريست) reset . الحلقة الرئيسية هي المكان الذي يتم فيه الوظيفة التشغيلية الفعلية للاردوينو Arduino - على سبيل المثال ، إذا تمت برمجة Arduino ليكون جهاز ضوء وامض متتابع ، فسيتم وضع وظيفة الضوء الوامض في الحلقة الرئيسية.

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



برنامج (سكيتش) توضيحى للحلقة Loop :
يوضح البرنامج (الاسكيتش) main_loop الموضح أدناه كيفية عمل الحلقة الرئيسية في برنامج (سكيتش) الاردوينو. اكتب البرنامج (الاسكيتش) في Arduino IDE ، أو انسخه والصقه في IDE.
قم بتحميل Load الاسكيتش إلى Arduino ثم افتح نافذة الشاشة التسلسلية لرؤية نص إخراج الاسكيتش أثناء تشغيله.


كود:
void setup() {
  Serial.begin(9600);
  Serial.println("*** This message will only be displayed on start or reset. ***");
  delay(2000);
}

void loop() {
  Serial.println("-- Arduino now at top of main loop. --");
  Serial.println("--------------------------------------");
  delay(2000);

  Serial.println("Executing instructions in main loop.");
  delay(2000);

  Serial.println("Arduino now at bottom of main loop.\r\n");
}


يظهر النص الذي يطبعه الاسكيتش فى نافذة الشاشة التسلسلية أدناه.



كما يظهر العرض التوضيحي أعلاه ، يتم عرض النص في الدالة setup() مرة واحدة فقط عند فتح نافذة الشاشة التسلسلية لأول مرة وإعادة تعيين Arduino. بعد ذلك ، يدخل تنفيذ البرنامج إلى الدالة loop() وينفذ بشكل متكرر العبارات في الحلقة من الأعلى إلى الأسفل والعودة إلى الأعلى مرة أخرى في حلقة لا تنتهي أبدًا.
الدوال فى برنامج (سكيتش) توضيح الحلقة Loop :
في الاسكيتش main_loop أعلاه ، تتكون كل عبارة في setup() و loop() من دالة يتم استدعاؤها - أي أن الاستدعاء يعني أنه يتم تنفيذها أو تشغيلها.

الدالة delay() :
عندما يتم استدعاء الدالة delay() في العبارة delay(2000); عندئذ تتسبب دالة التأخير في فترة انتظار مدتها ثانيتان (2000 مللي ثانية ) . يمكن تغيير وقت التأخير بتمرير قيمة مختلفة للدالة delay() ، على سبيل المثال 3000 سيتسبب في تأخير 3 ثانية: delay(3000); .

الدالة println() :
ترسل الدالة println() نص text خارجًا من منفذ تسلسلي / USB للاردوينو Arduino ويتم عرضه في نافذة جهاز العرض التسلسلي.
تختلف الدالة println() عن الدالة delay() في أنها تحتوي على كلمة Serial ونقطة (.) قبلها:

كود:
  Serial.println("Text to print.");

سبب هذا الترميز notation (Serial.function_name()) لأن الدالة تعمل على المنفذ التسلسلي أو الكائن التسلسلي Serial object . ستلاحظ في الدالة setup() أن Serial.begin() تم استدعاؤها . هذه هي الدالة begin() التي تعمل على المنفذ التسلسلي - في هذه الحالة لضبطه على السرعة المطلوبة.
تسمى هذه الدوال التي يسبقها اسم كائن (مثل Serial) "طرق" "methods" في البرمجة الموجهة للكائنات.

ملخص الدوال Functions :
نأمل أن يوضح ما يلي ماهية الدوال والمصطلحات المستخدمة معها. لن يكون الفهم الأعمق للدوال ممكنًا إلا عندما نبدأ في كتابة الدوال الخاصة بنا .

• الدوال setup() و loop() :
الدوال setup() و loop() دالتان خاصتان تشكلان جزءًا من هيكل سكيتش (برنامج) الاردوينو.
نحن في الواقع نكتب هذه الدوال الخاصة من خلال إعطائها جسم الدالة (بين قوسي الفتح والإغلاق: {}) وكتابة العبارات في جسم الدالة .
كانت العبارات statements في هذه الدوال في الاسكيتش أعلاه تستدعي دوال موجودة مسبقًا تؤدي المهام التي نريدها ، على سبيل المثال إعداد سرعة المنفذ التسلسلي ، والتسبب في تأخير الوقت ، وكتابة نص إلى نافذة جهاز العرض التسلسلي.
يتم استدعاء الدالتين setup() و loop() تلقائيًا في الوقت المناسب لأنهما من دوال Arduino الخاصة.

• إستدعاء الدوال Calling Functions :
من خلال استدعاء أو استخدام الدوال الموجودة مسبقًا ، نستخدم التعليمات البرمجية (الكود) التي كتبها شخص آخر بالفعل.
تحتوي الدالة delay() على جسم دالة يحتوي على عبارات تؤدي إلى التأخير delay .نحن لا نرى هذه العبارات أو جسم الدالة لأنها إما جزء من لغة برمجة Arduino أو أنها موجودة في مكتبة دوال خارجية.

• تمرير قيمة إلى دالة Passing a Value to a Function
عندما يتم استخدام قيمة (مثل عدد number أو سلسلة نصية string) بواسطة دالة ، يقال أننا نمرر القيمة إلى الدالة.

تمرير قيمة للدالة delay() :
نحن نستدعى الدالة delay() فى الاسكيتش كما فى العبارة التالية :
delay(2000);
قيمة التأخير بالملى ثانية (2000) يقال أنه قد تم تمريرها إلى الدالة .

تمرير قيمة إلى الدالة println() :
نحن نمرر سلسلة نصية إلى الدالة println() كما فى العبارة التالية :

كود:
Serial.println("Executing instructions in main loop.");

يجب علينا تمرير سلسلة نصية إلى الدالة حتى تعرف الدالة ما يجب إرساله من منفذ التسلسلي / USB. يُعرف النص بين علامتي اقتباس ("") بالسلسلة string في البرمجة.

التعليق على البرنامج (الاسكيتش) main_loop
يمكن رؤية الاسكيتش main_loop المبين أعلاه هنا مرة أخرى ، ولكن مع شرح وتعليق على ما يحدث في الاسكيتش .

كود:
void setup() {

يبدأ اسكيتش الاردوينو في العمل هنا عندما يتم استدعاء دالة الإعداد setup() تلقائيًا.

أولاً قمنا بإعداد set up المنفذ التسلسلي بمعدل البود 9600 الذي يجب أن يتطابق مع معدل البود في نافذة الشاشة التسلسلية. يمكن اعتبار سرعة الاتصال بالبود على أنها السرعة التي يتم بها الاتصال بين الاردوينو Arduino ونافذة الشاشة التسلسلية.

كود:
Serial.begin(9600);

يتم إرسال سطر line من النص (يُعرف باسم "سلسلة" "string" النص في لغات البرمجة) خارج المنفذ التسلسلي / USB لعرضه في نافذة جهاز العرض التسلسلي.

كود:
Serial.println("*** This message will only be displayed on start or reset. ***");

تمت إضافة تأخير لمدة ثانيتين حتى لا يظهر النص التالي الذي سيتم عرضه في نافذة جهاز العرض التسلسلي على الفور.

كود:
delay(2000);
}

تم الانتهاء من تنفيذ العبارات في الدالة setup() ، لذا يتم الآن استدعاء دالة الحلقة loop() تلقائيًا.

كود:
void loop() {

الآن يتم التنفيذ في حلقة ، سيتم تنفيذ العبارات داخل الدالة loop() من أعلى إلى أسفل. عند الوصول إلى الجزء السفلي من الحلقة ، سيتم تنفيذ جميع العبارات مرة أخرى من أعلى إلى أسفل.

يتم إرسال هذا النص إلى نافذة جهاز العرض التسلسلي وهو أول عبارة يتم تنفيذها في الحلقة.

كود:
Serial.println("-- Arduino now at top of main loop. --");

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

كود:
Serial.println("--------------------------------------");

التأخير لمدة ثانيتين بحيث لا يظهر سطر النص التالي على الفور مع النص أعلاه.

كود:
delay(2000);

نقوم الآن بتنفيذ العبارات statements (تسمى أيضًا تعليمات instructions) في منتصف حلقة Arduino الرئيسية. العبارة التالية ترسل المزيد من النص إلى نافذة جهاز العرض التسلسلي.

كود:
Serial.println("Executing instructions in main loop.");

تأخير آخر بحيث لا يظهر سطر النص التالي في نفس وقت سطر النص أعلاه.

كود:
delay(2000);

العبارة الأخيرة في الحلقة والنص الأخير الذي يتم إرساله إلى نافذة جهاز العرض التسلسلي قبل العودة إلى أعلى الحلقة لبدء تنفيذ العبارات مرة أخرى.
تتسبب الدالة println() في تحريك المؤشر غير المرئي إلى السطر التالي في نافذة جهاز العرض التسلسلي. يؤدي هذا إلى ظهور النص التالي المرسل إلى نافذة جهاز العرض التسلسلي على السطر الموجود أسفل النص المطبوع حاليًا.
تنقل الأحرف \r\n الموجود في نهاية نص السلسلة هذا المؤشر غير المرئي لأسفل بسطر واحد آخر ويترك سطرًا فارغًا بين النص المطبوع في أسفل الحلقة والنص المطبوع في أعلى الحلقة.

كود:
Serial.println("Arduino now at bottom of main loop.\r\n");
}

اعلانات
إضافة رد

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

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

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


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

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