الدرس 2: استخدام حلقة الوقت
في هذا الدرس، سوف تقوم بإنشاء مشروع باستخدام مستشعر الصدمات والحلقة بينما . في التحدي المصغر، ستطبق هذه المهارات للتنقل من بداية متاهة الجدار إلى الحرف "أ".

مخرجات التعلم
- حدد أن الأوامر غير المنتظرة تجعل المشروع يستمر حتى لو لم يكتمل سلوك الأمر بعد.
- حدد أن أمر الانتظار يكمل السلوك قبل المتابعة خلال المشروع.
- حدد أن حلقة بينما ستتحقق بشكل متكرر من شرط منطقي، ولن تنتقل إلى الأمر التالي حتى يبلغ الشرط عن True.
- حدد أن الحلقة بينما تُستخدم مع الأوامر غير الانتظارية (على سبيل المثال محرك الأقراص) للتحقق من حالة المستشعر.
- حدد أن الكلمة الأساسية وليس تعكس قيمة الشرط المنطقي من True إلى False أو من False إلى True.
- حدد أن الأوامر left_bumper.pressed و right_bumper.pressed ترجع قيمة True أو False في حلقة while .
- صف كيفية إنشاء مشروع يحتوي على محرك روبوت الواقع الافتراضي للأمام حتى يتم الضغط على مستشعر المصد.
أثناء الحلقات
تقبل الحلقة بينما الشروط المنطقية. بينما تتحقق الحلقات بشكل متكرر من حالة منطقية وتتحكم في تدفق المشروع. ستستمر حلقة بينما في التكرار طالما أن الشرط هو& صحيح. ستخرج حلقة بينما من الحلقة وتنتقل إلى الأمر التالي خارج الحلقة بمجرد أن يبلغ الشرط عن False.

في الأساس، فإن حلقة بينما تخبر روبوت الواقع الافتراضي بمواصلة القيام بسلوك بينما يتم استيفاء شرط معين. المنطق مشابه لهذا السيناريو: بينما تشرق الشمس، اذهب للعب في الخارج. ماذا كنت ستفعل ؟ تحدد حالة "الشمس مشرقة" المكان الذي يجب أن تكون فيه. عندما تشرق الشمس، تكون الحالة صحيحة، لذلك تذهب للعب في الخارج. عندما تغرب الشمس، تكون هذه الحالة خاطئة، لذلك ستعود إلى الداخل.

بينما الحلقات ومشكلة متاهة الجدار
ينطبق نفس المنطق على روبوت الواقع الافتراضي في المتاهة الجدارية. أثناء عدم الضغط على مستشعر المصد، يجب أن يستمر روبوت الواقع الافتراضي في التقدم للأمام. عند الضغط عليه، يجب أن يتوقف أو يدور. باستخدام بينما حلقات بالتزامن مع الأوامر غير الانتظارية، مثل drive، يمكننا برمجة روبوت الواقع الافتراضي للقيام بذلك فقط. ومع ذلك، تستخدم أوامر مستشعر المصد حالة مستشعر المصد الذي يتم الضغط عليه( left_bumper.pressed أو right_bumper.pressed) من أجل ترميز روبوت الواقع الافتراضي للقيادة أثناء عدم الضغط على مستشعر المصد، نحتاج إلى استخدام مشغل NOT.
def main ():
while not condition:
wait (5, MSEC)
لمعلوماتك
تحدد الأوامر غير المنتظرة والأوامر المنتظرة متى يبدأ الأمر التالي السلوك. في انتظار الأوامر، مثل drive_for و turn_for، أكمل سلوكياتهم قبل الانتقال إلى الأمر التالي في المشروع. تستمر الأوامر غير المنتظرة، مثل القيادة والدوران، في الانتقال إلى الأمر التالي في المشروع حتى لو لم يكتمل سلوك الأمر غير المنتظر.
أوامر الانتظار
drivetrain.drive_for(إلى الأمام، 200، مم)
drivetrain.turn_for(إلى اليمين، 90، درجة)
أوامر غير منتظرة
drivetrain.drive(للأمام)
drivetrain.turn(لليمين)
الكلمة الرئيسية NOT
سيتم استخدام الكلمة الأساسية وليس عادةً مع حلقات بينما ، لجعل الأوامر داخل الحلقة تُنفذ بينما يعود الشرط بقيمة False. ولاستخدام مثال "الشمس مشرقة"، يمكن الوصول إلى نفس التأثير باستخدام عامل وليس . بينما لا تشرق الشمس، ادخل.

في المتاهة الجدارية، يكون هذا مفيدًا حتى نتمكن من ترميز روبوت الواقع الافتراضي
بحيث أثناء عدم الضغط على مستشعر المصد، فإنه سيتقدم للأمام.
لا تزال الحالة "إذا تم الضغط على مستشعر المصد"، ولكن بهذه الطريقة، عندما يبلغ عن خطأ (لم يتم
الضغط عليه)، يظل تدفق المشروع في الحلقة. عند الضغط على مستشعر المصد، تكون الحالة صحيحة، لذلك
سينتقل المشروع من الحلقة.
لمعلوماتك
الكلمة الأساسية وليس هي عامل منطقي يعكس قيمة القيمة . سيؤدي وضع الكلمة الرئيسية ليس أمام أمر يُرجع قيمة منطقية إلى عكس True to False وFalse to True. على سبيل المثال، تخيل أن مستشعر المصد الأيسر على روبوت الواقع الافتراضي مضغوط، ويعيد الأمر left_bumper.pressed True. ستؤدي الكلمة الأساسية وليس إلى عكس القيمة المنطقية، وتجعل هذا التعبير يعود بـ False.
notleft_bumper.press ()
اعتمادًا على بيانات المستشعر التي تستخدمها، قد تكون الكلمة الأساسية وليس ضرورية لجعل روبوت الواقع الافتراضي ينفذ السلوكيات المطلوبة.
def main ():
while not left_bumper.pressed (): drivetrain.drive
( FORWARD)
wait(5, MSEC
) drivetrain.stop ()
بناء مشروع باستخدام حلقة While ومستشعر الصدمات
اسم المشروع وحفظه
- افتح مشروعًا نصيًا جديدًا وحدد Wall Maze Playground عند
مطالبتك بذلك.

-
اسم المشروع Unit4Lesson2.

-
اسحب أو اكتب الأمر بينما في مساحة العمل لاستبدال الأمر Drivetrain الذي يتم ملؤه تلقائيًا كجزء من مشروع نص جديد. لاحظ أن هناك الأمر a wait داخل الحلقة. لا تقم بإزالة الأمر wait ، فسوف يضمن ذلك أن يقوم روبوت الواقع الافتراضي بتنفيذ المشروع بشكل صحيح. يجب أن يبدو مشروعك كما يلي:
def main (): while condition: wait(5, MSEC) -
اكتب عامل التشغيل وليس بعد "while" في الأمر while . يجب أن يبدو مشروعك الآن كما يلي:
def main (): while not condition: wait(5, MSEC) -
اسحب أو اكتب الأمر left_bumper.pressed في "شرط" حلقة while. سيتم تنفيذ الأوامر داخل الحلقة عندما تكون الحالة غير صحيحة، مما يعني أنه عندما لا يتم الضغط على مستشعر المصد الأيسر. يجب أن يبدو مشروعك الآن كما يلي:
def main (): while not left_bumper.press (): wait(5, MSEC) -
داخل الحلقة بينما ، اسحب أو اكتب الأمر drive. تأكد من أن الأمر drive والأمر wait تم وضعهما بشكل صحيح داخل حلقة while ، بحيث تعمل الحلقة كما هو مقصود. يمكنك استخدام الخطوط الإرشادية كوسيلة مساعدة بصرية. يجب أن يبدو مشروعك الآن كما يلي:
def main (): while not left_bumper.pressed (): drivetrain.drive ( forward) wait(5, MSEC) -
اسحب أو اكتب الأمر stop خارج الحلقة while تأكد من أن الأمر stop محاذي للحلقة while ، وليس مسننًا، بحيث يعمل خارج الحلقة كما هو مقصود. يمكنك استخدام الخطوط الإرشادية كوسيلة مساعدة بصرية. يجب أن يبدو مشروعك الآن كما يلي:
def main (): while not left_bumper.pressed (): drivetrain.drive ( FORWARD) wait(5, MSEC ) drivetrain.stop () - افتح نافذة الملعب إذا لم تكن مفتوحة بالفعل. تأكد من فتح ملعب متاهة الحائط .
- قم بتشغيل المشروع.
- شاهد محرك روبوت الواقع الافتراضي من بداية متاهة الحائط وتوقف عند الضغط على مستشعر المصد بواسطة الحائط.
- يسمح أمر القيادة لروبوت الواقع الافتراضي بمواصلة القيادة إلى الأمام أثناء التحقق من حالة مستشعر المصد باستخدام أمر الضغط على المصد الأيسر. بمجرد أن يبلغ الأمر left_bumper.pressed على أنه True، سينتقل روبوت الواقع الافتراضي إلى الأمر التالي خارج الحلقة ويتوقف عن القيادة.
قم باختيار الزر التالي لمواصلة بقية هذا الدرس.