Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

‫برمجة األردوينو والروبوتات ببساطة!

‫‪ .14‬الداالت ‪functions‬‬
‫‪ .14.1‬ما هي الداالت ‪Functions‬‬

‫إن تجزئة الكود إلى داالت يسمح للمبرمج بإنشاء أجزاء معيارية من الكود تؤدي مهمة محددة ثم‬

‫تعود إلى منطقة الكود التي تم استدعاء الوظيفة منها‪ .‬الحالة النموذجية إلنشاء دالة هي عندما‬

‫يحتاج المرء إلى تنفيذ نفس اإلجراء عدة مرات في البرنامج‪.‬‬

‫لنالحظ الكود ‪ 14.1‬حيث يعمل على وميض الضوء على المخرج ‪ 13‬بسرعات مختلفة ‪ 10‬مرات كل‬

‫مرة‪.‬‬

‫كود ‪14.1‬‬
‫برمجة األردوينو والروبوتات ببساطة!‬

‫ومن خالل استعمال الداالت ‪ Functions‬سنقوم بتنظيم هذا البرنامج‪.‬‬

‫قم باختيار الدالة كما في الصورة ‪.14.1‬‬

‫اسم الدالة‬

‫األوامر‬

‫صورة ‪ :14.1‬شرح عنصر الدالة‬

‫قم بوضع كل حلقة في الكود ‪ 14.1‬ضمن دالة منفصلة وقم بتسميتها كما في الكود ‪ 14.2‬وبهذه‬

‫الطريقة وزعنا األوامر على عدة داالت‪ .‬وعند تحميل هذا الكود نالحظ عدم حدوث أي شيء‪ .‬وضع‬

‫األوامر ضمن الدالة يعرفها فقط وال ينفذها‪ .‬ولتنفيذ أوامر الدالة علينا أن نستدعيها ‪ Call‬عن طريق‬

‫أمر ‪ Do‬كما في الصورة ‪ . 14.2‬ولتخفيف مساحة البرنامج سنقوم بإغالق الداالت عن طريق ‪Collapse‬‬

‫ويمكن فتحها عن طريق ‪( Expand‬صورة ‪ .)14.3‬قم بعمل الكود ‪ 14.3‬والحظ النتيجة حيث ستعطي‬

‫النتيجة السابقة للكود ‪ 14.1‬ولكن البرنامج أصبح منظماً بشكل أكبر‪.‬‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫كود ‪14.2‬‬

‫عناصر استدعاء‬

‫الداالت‬

‫صورة ‪ :14.2‬عناصر استدعاء الدالة ‪ Call‬بعد تعريفها‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫صورة ‪ :14.3‬إغالق الدالة‬

‫استدعاء‬ ‫تعريف‬
‫الداالت‬ ‫الداالت‬

‫كود ‪ :14.3‬استعمال الداالت مع الشرح‬

‫‪ .14.2‬فوائد استعمال الداالت ‪Functions‬‬

‫بالنسبة للمبرمجين الذين اعتادوا على استخدام ‪ ، BASIC‬توفر األردوينو في ‪( Arduino‬وتوسع) فائدة‬

‫استخدام الروتينات الفرعية‪.‬‬

‫إن توحيد أجزاء الكود في الداالت له مزايا عديدة‪:‬‬

‫غالبا ما يساعد هذا على وضع تصور للبرنامج‪.‬‬


‫ً‬ ‫منظما‪.‬‬
‫ً‬ ‫تساعد الداالت المبرمج على البقاء‬ ‫•‬

‫واحدا في مكان واحد بحيث ال يجب التفكير في الوظيفة وتصحيحها إال‬


‫ً‬ ‫إجراء‬
‫ً‬ ‫تقنن الوظائف‬ ‫•‬

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

‫إحكاما ألنه يتم إعادة استخدام‬


‫ً‬ ‫تعمل الوظائف على جعل البرنامج بالكامل أصغر وأكثر‬ ‫•‬

‫أقسام التعليمات البرمجية عدة مرات‪.‬‬

‫إنها تجعل من السهل إعادة استخدام التعليمات البرمجية في برامج أخرى من خالل جعلها‬ ‫•‬

‫غالبا ما يجعل البرنامج أكثر‬


‫ً‬ ‫أكثر نموذجية‪ ،‬وكآثار جانبية لطيفة‪ ،‬فإن استخدام الوظائف‬

‫قابلية للقراءة‪.‬‬

‫‪ .14.3‬معامالت الداالت ‪Functions Parameters‬‬

‫في المثال السابق قمنا باستعمال الداالت لعمل أوامر ثابتة‪ .‬يمكن أيضاً استعمال المعامالت‬

‫الخاصة بالداالت لزيادة تنظيم البرنامج‪.‬‬

‫عن طريق زر اإلعدادات في الدالة ‪ Function‬يمكن إضافة معامل وهو عبارة عن متغير يستخدم في‬

‫الدالة‪ .‬وسنقوم بإضافة معاملين ‪ X‬و ‪ Y‬بنوع ‪ int‬كما في الصورة ‪.14.4‬‬

‫صورة ‪ :14.4‬إدراج معامالت ‪ X‬و ‪Y‬‬

‫من نافذة ‪ Math‬اختر عنصر العملية الحسابية وصمم الكود ‪ .14.4‬والحظ بعد تحميل الكود وفتح‬

‫نافذة ‪ serial monitor‬النتيجة كما في الصورة ‪ .14.5‬ويمكن تجربة عمليات حسابية مختلفة وتغيير‬

‫األرقام ومالحظة النتائج‪.‬‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫عملية حسابية بين معامالت‬

‫الدالة (يمكن إدراج ‪ x‬و ‪ y‬من نافذة‬

‫‪)variable‬‬

‫إدراج قيم متغيرة ل ‪ x‬و ‪y‬‬

‫كود ‪14.4‬‬

‫صورة ‪ :14.5‬نتيجة كود ‪14.4‬‬

‫‪ .14.1‬دالة القيم ‪Returning Value Function‬‬

‫الدالة التي تعاملنا معها تسمى دالة األوامر‪ Void Function‬حيث نقوم بعمل جميع األوامر خاللها‬

‫وال تعطينا أي قيم عائدة ‪ Returning Value‬وإنما تقوم بتنفيذ األوامر فقط‪.‬‬

‫وهناك نوع ثاني وهو دالة القيم ‪ Returning Value Function‬وشرحها في الصورة ‪ .14.6‬وسنقوم‬

‫بتكرار المثال السابق مع هذا النوع من الداالت كما في الكود ‪ .14.5‬والحظ النتيجة كما في الصورة‬

‫‪.14.7‬‬
‫برمجة األردوينو والروبوتات ببساطة!‬

‫اسم الدالة‬

‫األوامر‬

‫القيمة العائدة‬

‫صورة ‪ :14.6‬شرح دالة القيم ‪Returning Value Function‬‬

‫كود ‪14.5‬‬
‫برمجة األردوينو والروبوتات ببساطة!‬

‫صورة ‪ :14.7‬نتيجة كود ‪14.5‬‬

‫‪ .14.2‬استعمال الداالت مع التحكم الرقمي‬

‫قم بعمل الدارة التالية‬

‫صورة ‪14.8‬‬
‫برمجة األردوينو والروبوتات ببساطة!‬

‫التوصيالت في الصورة ‪ 14.8‬هي وفق الجدول التالي‪:‬‬

‫نوع القطعة‬ ‫رقم المأخذ‬


‫‪Led 1‬‬ ‫‪9‬‬
‫‪Led 2‬‬ ‫‪10‬‬
‫‪Led 3‬‬ ‫‪11‬‬
‫‪Potentiometer‬‬ ‫‪A0‬‬
‫في هذا المثال سنقوم بعمل ضوء متحرك حيث سيقوم البرنامج بتشغيل وإيقاف اإلشارة الضوئية‬

‫واحدة تلو األخرى من اليسار إلى اليمين كما في الجدول التالي حيث يمثل ‪ 1‬حالة ‪ HIGH‬و ‪ 0‬حالة‬

‫‪.LOW‬‬

‫صورة‬ ‫‪Led 1‬‬ ‫‪Led 2‬‬ ‫‪Led 3‬‬ ‫\‬

‫‪LOW‬‬ ‫‪LOW‬‬ ‫‪LOW‬‬ ‫إيقاف الجميع‬

‫‪HIGH‬‬ ‫‪LOW‬‬ ‫‪LOW‬‬ ‫تشغيل ‪ Led 1‬وإيقاف الباقي‬

‫‪LOW‬‬ ‫‪HIGH‬‬ ‫‪LOW‬‬ ‫تشغيل ‪ Led 2‬وإيقاف الباقي‬

‫‪LOW‬‬ ‫‪LOW‬‬ ‫‪HIGH‬‬ ‫تشغيل ‪ Led 3‬وإيقاف الباقي‬

‫جدول ‪ :14-1‬شرح حاالت اإلشارات الضوئية لعمل حركة انسيابية‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫‪ -1‬تعريف المتغيرات‬
‫الحظ المتغيرات في الصورة ‪ .14.9‬تم إنشاء متغير ‪ delayTime‬الستعمال قيمة المقاومة المتغيرة‬

‫للتحكم بسرعة حركة النور في اإلشارات الضوئية ‪ .LEDs‬وعن طريق دالة ‪ Map‬تم تحويل قراءة‬

‫المقاومة المتغيرة )‪ ( 0 – 1023‬إلى المجال )‪ ( 50 – 500‬الذي سيستعمل ضمن دالة التأخير ‪.delay‬‬

‫صورة ‪ :14.9‬تعريف متغيرات‬

‫للتعبير عن الحالة ‪ 1‬في ال‬

‫مثال‪ ,‬سنقوم بعمل الكود في الصورة ‪ 14.10‬ولعمل الحالة ‪ 2‬نستخدم الكود في‬
‫ً‬ ‫جدول ‪14-1‬‬

‫الصورة ‪ 14.11‬وهكذا‪.‬‬

‫صورة ‪ :14.10‬تمثيل حالة ‪1‬‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫صورة ‪ :14.11‬تمثيل حالة ‪2‬‬

‫لعمل الحاالت األربعة سنحتاج الى تكرار كمية كبيرة من العناصر وبالتالي ستصبح قراءة البرنامج‬

‫صعبة‪.‬‬

‫ولحل المشكلة سنستعمل دالة تعبر عن حالة ونستخدم معامالت لكل حالة كما في ال !‪Error‬‬

‫‪ .Reference source not found.‬حيث نالحظ استعمال معامالت الستخدامها كحالة لكل إشارة‬

‫ضوئية ‪.LED‬‬

‫وفق الجدول التالي‪:‬‬

‫حالة ‪Led 1‬‬ ‫‪S1‬‬

‫حالة ‪Led 2‬‬ ‫‪S2‬‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫حالة ‪Led 3‬‬ ‫‪S3‬‬

‫جدول ‪14-2‬‬

‫صورة ‪ :14.12‬دالة التحكم بحاالت اإلشارات الضوئية‬

‫لتمثيل كل حالة سنستدعي الدالة ‪ status‬المعرفة في ال‪ Error! Reference source not found.‬عن‬

‫طريق دالة ‪ do‬كما في ال‪ ،Error! Reference source not found.‬حيث يمثل رقم ‪ 1‬حالة ‪ HIGH‬و‬

‫رقم ‪ 0‬حالة ‪.LOW‬‬

‫وسنقوم بعمل كامل الكود ‪ 14.6‬مع استخدام قراءة المقاومة المتغيرة للتحكم بالسرعة‪ .‬والشرح‬

‫مرفق مع الكود‪.‬‬
‫برمجة األردوينو والروبوتات ببساطة!‬

‫صورة ‪ :14.13‬استدعاء دالة التحكم في حاالت اإلشارات الضوئية‬

‫تعتبر الداالت من أقوى األدوات في البرمجة واألردوينو وخصوصاً في التعامل مع برامج التحكم‬

‫الكبيرة في الروبوتات والمشاريع الضخمة‪.‬‬


‫برمجة األردوينو والروبوتات ببساطة!‬

‫تعريف المتغيرات‬

‫قراءة المقاومة‬

‫المتغيرة وعمل‬

‫تحويل للمجاالت‬

‫دالة الحالة‬

‫القسم الرئيسي في‬

‫البرنامج )(‪ Loop‬حيث يتم‬

‫استدعاء دالة ‪status‬‬

‫واستعمال التأخير الزمني‬

‫بالزمن المرتبط بقيمة‬

‫المقاومة المتغيرة‬

‫كود ‪ :14.6‬التحكم بحاالت إشارات ضوئية ضمن زمن‬

You might also like