 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
17-10-2022, 09:01 PM
المشاركة 10
|
|
مثال : تابع الخط Line follower
في الخريطة الافتراضية default.map تجد خطًا أبيض في الشرق. يشكل هذا الخط مسارًا عبر البيئة. كيف يمكنك جعل الروبوت يتبع هذا المسار؟
الحل مشابه إلى حد ما للمثال السابق. بعد إحضار الروبوت إلى بداية المسار ، فإنه يحدد ما يجب القيام به خطوة بخطوة.
انظر أيضًا: التعليمات الأساسية: move, see, programming structures ، هياكل البرمجة: الحلقات ، الإجراءات ، هياكل الشرط ، النهاية loops, procedures, if-structures, end
[IMG] [/IMG]
كود:
# Go to the start of the line
right
forward(8)
# Keep on track step by step
repeat
{
if(frontIsWhite){
forward(1)
}
else if(rightIsWhite){
right
}
else if(leftIsWhite){
left
}
else if(frontIsObstacle){
end
}
• فى البداية يتم وضع الربوت عند بداية الخط
• يتم عمل حلقة تكرار لانهائى بهيكل repeat ، داخل هذه الحلقة يوجد 4 حالات لهيكل الشرط if (condition) {…} else if (condition) {…} . يتم تفيذ الحالة الأولى أو الثانية أو الثالثة ويتكرر هذا العمل ختى الوصول إلى الحالة الرابعة حيث يتم إنهاء end الحلقة والبرنامج .
- الحالة الأولى : اختبار الأمام أبيض ، فى حالة الصواب تقدم خطوة للأمام
كود:
if(frontIsWhite){
forward(1)
}
- الحالة الثانية : اختبار اليمين أبيض ، فى حالة الصواب استدر جهة اليمين ، عندئذ يتحول إلى الحالة الأولى وفى التكرار التالى يتقدم خطوة للأمام .
كود:
else if(rightIsWhite){
right
}
- الحالة الثالثة : اختبار اليسار أبيض ، فى حالة الصواب استدر جهة اليسار ، عندئذ يتحول إلى الحالة الأولى وفى التكرار التالى يتقدم خطوة للأمام .
كود:
else if(leftIsWhite){
left
}
- الحالة الرابعة : اختبار عائق بالأمام ، فى حالة الصواب يتم إنهاء البرنامج بالتعليمة end .
كود:
else if(frontIsObstacle){
end
}
نهج آخر هو استخدام ما يسمى الإجراءات العودية recursive procedures. في البرنامج النصي script التالي ، ترى أنه تم تعريف الإجراء follow . في هذا الإجراء ، بعد تنفيذ الخطوة الصحيحة ، سترى أن follow يستخدم في تعريفه الخاص. ما تحصل عليه هو تسلسل من follow (...follow(...follow(...)...)...) يؤدي الإجراء الصحيح في كل خطوة لإنجاز المهمة. يُطلق على هذا التعريف المتكرر اسم العودية recursion ، ومن المحتمل أن تجده غريبًا نوعًا ما في المرة الأولى التي تراها فيه. لا تقلق ، العب بها(تمرن عليها) وسيصبح الأمر أكثر وضوحًا.
كود:
# Go to the start of the line
right
forward(8)
# Start tracking
follow
# Recursive definition for tracking
procedure follow{
if(frontIsWhite){
forward(1)
follow
}
else if(rightIsWhite){
right
follow
}
else if(leftIsWhite){
left
follow
}
else if(frontIsObstacle){
# Finish the current procedure call
# (because there is nothing to after
# this return, all calls will be finished
# and the program stops)
return
}
}
تمرير المنارات Pass beacons
الخريطة المستخدمة : map: passBeacons.map
[IMG] [/IMG]
كود:
# Pass beacons script
# map: passBeacons.map
right
repeatWhile(frontIsClear){
forward(1)
}
repeatWhile(frontIsBeacon){
pickUp
turn
putDown
turn
forward(1)
}
forward(2)
procedure turn{
right
right
}
|