جدول المحتويات:

برمجة Micro: Bit Robot & Joystick: Bit Controller مع MicroPython: 11 خطوة
برمجة Micro: Bit Robot & Joystick: Bit Controller مع MicroPython: 11 خطوة

فيديو: برمجة Micro: Bit Robot & Joystick: Bit Controller مع MicroPython: 11 خطوة

فيديو: برمجة Micro: Bit Robot & Joystick: Bit Controller مع MicroPython: 11 خطوة
فيديو: Using the MicroPython REPL with the micro:bit 2024, يوليو
Anonim
برمجة Micro: Bit Robot & Joystick: Bit Controller مع MicroPython
برمجة Micro: Bit Robot & Joystick: Bit Controller مع MicroPython

بالنسبة إلى Robocamp 2019 ، معسكر الروبوتات الصيفي الخاص بنا ، يقوم الشباب الذين تتراوح أعمارهم بين 10 و 13 عامًا باللحام والبرمجة وبناء `` روبوت مضاد للوزن '' من بي بي سي ميكرو: بت ، بالإضافة إلى برمجة ميكرو: بت لاستخدامه كجهاز تحكم عن بعد.

إذا كنت حاليًا في Robocamp ، فانتقل إلى الخطوة 3 ، كما فعلنا أول خطوتين كمجموعة

هذا دليل تفصيلي خطوة بخطوة للحصول على روبوت ميكرو: بت يتواصل مع عصا التحكم: وحدة تحكم بت.

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

بالنسبة لهذا النشاط ، نستخدم الروبوت المخصص الخاص بنا ، ولكنه سيعمل مع أي روبوت يستخدم محركًا مشابهًا ، مثل L9110s.

يمكن العثور على ملفات تصميم الروبوت الخاص بنا هنا:

هذا الدليل مكتوب للمبتدئين ، ولكن إذا لم تستخدم قط micro: bit مع MicroPython من قبل ، فننصحك بتجربة برنامج أبسط أولاً ، مثل شارة الاسم Instructable: https://www.instructables.com/id/Felt -Microbit- نام …

اللوازم

2x بي بي سي مايكرو: بت

روبوت يعمل مع BBC micro: bit (انظر الشرح أعلاه)

عصا التحكم: وحدة تحكم بت (حصلنا عليها من Cool Components)

الخطوة 1: إعداد الروبوت

لديك بعض الخيارات لكتابة كود MicroPython لـ micro: bit الخاص بك:

  • Mu ، والذي يمكنك تنزيله وتثبيته من هنا:
  • المحرر عبر الإنترنت ، والذي يمكنك العثور عليه هنا:

تفترض هذه التعليمات أنك تستخدم Mu

افتح Mu ، وقم بتوصيل micro: bit بجهاز الكمبيوتر الخاص بك. يجب أن يتعرف Mu على أنك تستخدم micro: bit وأن تختار "وضع" micro: bit ، ولكن إذا لم يحدث ذلك ، فقم بتغييره يدويًا.

اختر الوضع
اختر الوضع

احصل على نسخة من كود اختبار محرك الروبوت من هنا:

إذا لم تكن معتادًا على Github ، فقد يكون ذلك غير بديهي! طريقتان سهلتان للحصول على هذا الرمز هما:

  1. احفظ ملف Raw على جهاز الكمبيوتر الخاص بك ، ثم قم بتحميله في Mu:
  2. انسخ والصق كل الكود المعطى في ملف جديد في Mu.
حفظ الملف الخام
حفظ الملف الخام

الآن انقر فوق الزر "Flash" من شريط أدوات Mu ، لإرسال رمزك الجديد إلى micro: bit.

لن يعمل هذا إلا إذا تم توصيل micro: bit

سيبدأ الضوء الأصفر الموجود خلف micro: bit في الوميض. عند الانتهاء ، تم نقل الرمز الخاص بك.

إعداد اتجاهات المحرك

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

ما تريده هو:

  • عندما يتم عرض "A" ، يسار المحرك للأمام
  • عندما يتم عرض "B" ، يسار المحرك للخلف
  • عندما يتم عرض "C" ، فإن المحرك الأيمن للأمام
  • عندما يتم عرض "D" ، يمين المحرك للخلف

من المحتمل ألا يكون هذا هو الحال ، حيث يعتمد ذلك على كيفية توصيل الروبوت الخاص بك بالأسلاك!

في الجزء العلوي من الكود ، ستجد قائمة بالمتغيرات ، والتي تحدد الدبوس الموجود على micro: bit الذي يتحكم في اتجاه المحرك.

إذا كنت تستخدم أحد برامج الروبوت (الملفات) الخاصة بنا ، فقم بتبديل أسماء المتغيرات حولها لجعل الروبوت يتحرك في الاتجاهات الصحيحة:

متغيرات دبوس المبادلة
متغيرات دبوس المبادلة

إذا كنت تستخدم روبوتًا خاصًا بك ، فتحقق من المسامير التي يتصل بها سائق المحرك قبل تحرير الرمز.

اختبار القيادة

تحقق الآن من كيفية قيادة الروبوت الخاص بك عن طريق استبدال رمز الاختبار في الحلقة الرئيسية ببعض التعليمات البرمجية الخاصة بك.

يمكنك إخبار الروبوت بالقيادة عن طريق استدعاء وظيفة محرك الأقراص (). يأخذ هذا حجتين - قيمة للمحرك الأيسر وقيمة للمحركات اليمنى ، بين 0 (إيقاف) و 1023 (السرعة القصوى).

من خلال استدعاء محرك الأقراص (500 ، 500) ، على سبيل المثال ، فإنك تخبر كلا المحركين بالتشغيل ، في الاتجاه الأمامي ، بنصف السرعة تقريبًا.

جرب بعض الخيارات للتعرف على كيفية قيادتها بشكل مستقيم ومدى نجاحها.

تلميح: كانت اختبارات المحرك داخل حلقة True loop وعبارة if - لن تدور المحركات حتى تضغط على الزر A على micro: bit ، ويتحقق إلى الأبد مما إذا كنت قد ضغطت على الزر A.

تلميح: المحركات لن تنطفئ حتى تخبرهم بذلك! سوف يستمرون دائمًا في تنفيذ تعليماتهم الأخيرة.

اختياري: تحسين القيادة في خط مستقيم

إذا كان الروبوت الخاص بك لا يقود في خط مستقيم ، فقد يدور أحد محركاتك أسرع من الآخر.

بعد التحقق من عدم وجود شيء ماديًا يمنع العجلة من الدوران بحرية ، يمكنك تعديل الكود في وظيفة القيادة لتقليل سرعة المحرك الأسرع.

قم بالتمرير لأعلى للعثور على تعريف وظيفة محرك الأقراص ، وإلقاء نظرة على التعليمات العلويتين:

محرك def (L ، R):

# يوجد أدناه تعديل لتصحيح التباين في سرعة المحرك L = int (L * 1) R = int (R * 1)

يأخذ هذان الخطان حاليًا قيمة L و R ، ويضربهما في 1 ، ثم تأكد من أنهما لا يزالان عددًا صحيحًا (int).

على سبيل المثال ، إذا كان محركك الأيسر أسرع ، فقم بتغيير * 1 على خطه إلى * 0.9 ، ومعرفة ما إذا كان ذلك يحسن الأمور.

لن تكون قادرًا على جعله مثاليًا ، ولكن يمكنك الاستمرار في ضبطه حتى يقودك بشكل أكثر استقامة.

إعداد الراديو

الآن قم بإعداد الراديو ، عن طريق إضافة الأسطر التالية إلى أعلى الكود الخاص بك:

استيراد الراديو

radio.config (قناة = 7 ، مجموعة = 0 ، قائمة انتظار = 1) radio.on ()

سيسمح هذا لروبوتك بتلقي تعليمات من ميكرو: بت آخر ، لكنه في الوقت الحالي سيتلقى تعليمات من أي ميكرو: بت آخر.

هذا لأن القناة 7 والمجموعة 0 هما القناتان الافتراضيتان.

غيّر هذه الأرقام ، واختر قناة بين 0-82 ومجموعة بين 0-255. الآن سيتلقى micro: bit الخاص بك التعليمات من الآخرين الذين لديهم نفس معلومات التكوين فقط.

queue = 1 تعني أن micro: bit سوف يحتفظ فقط برسالة واردة واحدة في كل مرة - وهذا يعطي وقت استجابة أسرع قليلاً من الافتراضي ، وهو 3.

أنت الآن بحاجة إلى تعديل رمز الحلقة الرئيسية إلى ، بدلاً من تشغيل التعليمات عند الضغط على زر ، انتظر رسالة راديو واردة وقم بالرد بشكل مناسب.

جرب الكود التالي كاختبار (لن يفعل أي شيء حتى تقوم بإعداد عصا التحكم في الخطوة 2):

احيانا صحيح:

message = radio.receive () إذا كانت الرسالة == 'إعادة توجيه: محرك (500 ، 500)

الخطوة 2: إعداد جويستيك

افصل micro: bit من الروبوت الخاص بك ، وقم بتوصيل micro: bit الخاص بعصا التحكم بدلاً من ذلك

احصل على نسخة من كود إعداد عصا التحكم من هنا:

قم بإعداد الراديو باستخدام نفس التكوين (القناة ورقم المجموعة) كما فعلت للروبوت - سيسمح ذلك للاثنين بالتواصل مع بعضهما البعض.

في نهاية البرنامج ، ابدأ الحلقة الرئيسية الخاصة بك:

احيانا صحيح:

if button_a.was_pressed (): radio.send ('forward')

هذا الرمز لا يستخدم عصا التحكم: بت. يستخدم الزر A على المايكرو بت لإرسال رسالة.

تأكد من أن كلاً من الروبوت وجهاز التحكم الخاص بك micro: bits يتمتعان بالطاقة ، ثم اضغط على الزر لإرسال رسالتك.

إذا تم استلام الرسالة بنجاح ، وتحرك الروبوت الخاص بك … أحسنت! لقد انتهيت من تعليمات الإعداد.

نصائح استكشاف الأخطاء وإصلاحها

إذا تلقيت رسالة خطأ على وحدة التحكم micro: bit… تصحيح رمز وحدة التحكم الخاصة بك

إذا تلقيت رسالة خطأ على الروبوت micro: bit … تم إرسال رسالة الراديو الخاصة بك بنجاح! لكن الروبوت لا يستطيع فهمها ، لذا تحقق من الرسالة التي أرسلتها والرسالة التي طلبت من الروبوت الاستماع إليها.

إذا لم يحدث شيء على الإطلاق

  • تأكد من وميض الكود الصحيح لكل ميكرو: بت - من السهل وميض الرمز الخطأ عن طريق الخطأ!
  • تأكد من تطابق أرقام القناة والمجموعة الخاصة بك على كل ميكرو: بت

الخطوة 3: التحقق من قيم جويستيك

تستخدم جميع الخطوات القليلة التالية رمز وحدة التحكم

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

استبدل الحلقة الرئيسية الخاصة بك بالرمز التالي:

احيانا صحيح:

جويستيك = joystick_push () print (جويستيك) سكون (500)

قم بتفليش هذا الرمز إلى micro: bit الخاص بك ، ثم انقر فوق الزر REPL على شريط أدوات Mu. سيؤدي هذا إلى فتح محطة طرفية في الجزء السفلي من المحرر ، والتي تمنحك رابطًا في الوقت الفعلي إلى micro: bit.

افتح ملف REPL
افتح ملف REPL

لن يعمل هذا إلا إذا تم توصيل micro: bit

مع فتح REPL ، اضغط على زر إعادة الضبط في الجزء الخلفي من micro: bit.

صورة
صورة

يجب أن ترى بعض القيم تجلب "الطباعة" إلى شاشتك:

القيم في المحطة
القيم في المحطة

ادفع عصا التحكم وشاهد ما يحدث للأرقام.

قم بتدوين القيم المعطاة عندما يكون ذراع التحكم في الموضع المركزي - في حالتي (518 ، 523).

انقر فوق الزر REPL على شريط أدوات Mu مرة أخرى لإغلاقه - لن تتمكن من وميض رمز جديد إلى micro: bit أثناء فتحه.

الخطوة 4: ضبط متغيري X و Y

تريد تغيير القيم التي تقدمها وظيفة عصا التحكم ، بحيث:

  • في المركز صفر
  • ما يصل هو إيجابي
  • أسفل سلبي.

هذا يطابق التعليمات التي يحتاجها الروبوت - رقم موجب للقيادة للأمام ورقم سالب للقيادة للخلف.

انظر إلى الأرقام التي حصلت عليها في الخطوة الأخيرة. الرقم الأول هو x ، والرقم الثاني هو y.

قم بتحرير تعريف joystick_push () الموجود بالفعل في البرنامج ، لطرح القيم الخاصة بك من الأصل:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 إرجاع x ، y

استخدم أرقامك الخاصة ، فقد تكون مختلفة عن أرقامي

قم بتفليش الكود الجديد الخاص بك ، افتح REPL ، واضغط على زر إعادة تعيين micro: bit وتحقق من قيمك.

هل تحصل على (0 ، 0)؟

الخطوة 5: تحويل X و Y إلى قيم لمحركات اليسار واليمين

في الوقت الحالي ، لن تكون عصا التحكم هذه مفيدة جدًا في قيادة الروبوت. عند دفعك للأمام على طول الطريق ، ستحصل على قيمة مثل (0 ، 500).

إذا أعطيت الروبوت هذه الأرقام ، فسيتم تشغيل المحرك الأيمن وليس المحرك الأيسر ، وهذا ليس ما تريد حدوثه!

يوضح هذا الرسم التخطيطي ما يحدث لقيمتي x و y عند تحريك عصا التحكم ، وما نريد أن يفعله الروبوت عند تحريك عصا التحكم.

رسم بياني
رسم بياني

تحتاج إلى استخدام بعض الرياضيات لخلط قيم x و y ، لإعطائك شيئًا أكثر فائدة.

ن

الرياضيات

لنبدأ بدفع عصا التحكم إلى الأمام.

مثال على القيم التي قد تحصل عليها هو:

س = 0

ص = 500

لكي تكون مفيدًا للروبوت ، فأنت تريد الحصول على قيم مثل هذه:

اليسار = 500

صحيح = 500

دعنا نحاول إضافة x و y بطرق مختلفة لمعرفة الأرقام التي نحصل عليها:

س + ص = 0 + 500 = 500

س - ص = 0 - 500 = -500 ص + س = 500 + 0 = 500 ص - س = 500 - 0 = 500

لنرى الآن ما سيحدث إذا دفعنا عصا التحكم إلى اليمين.

مثال على القيم التي قد تحصل عليها هو:

س = 500

ص = 0

لجعل الروبوت يستدير لليمين ، فأنت تريد أن يتحرك المحرك الأيسر للأمام ، وأن يتحرك المحرك الأيمن للخلف:

اليسار = 500

يمين = -500

لنجرب صيغتنا مرة أخرى:

س + ص = 500 + 0 = 500

س - ص = 500 - 0 = 500 ص + س = 0 + 500 = 500 ص - س = 0 - 500 = -500

قارن مجموعتي الصيغة لمعرفة الخيار الذي سيمنحك القيمة اليسرى الصحيحة ، والخيار الذي سيمنحك القيمة الصحيحة الصحيحة.

جربها مع بعض القيم التي تحصل عليها من عصا التحكم الخاصة بك ، للتأكد من أن الصيغة التي تختارها تعمل طوال الوقت.

ن

توسيع وظيفة عصا الفرح

قم بتوسيع وظيفة عصا التحكم وتحريرها لإنشاء متغيرين جديدين لليسار واليمين ، ولإرجاع هذه القيم بدلاً من x و y:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 يسار = يمين = إرجاع يسارًا ، يمينًا

قم بتفليش الكود الجديد الخاص بك ، افتح REPL ، واضغط على زر إعادة تعيين micro: bit وتحقق من قيمك.

هل تحصل على القيم التي تتوقعها؟

إذا كنت بحاجة إلى مزيد من المساعدة ، فتحقق من رمز المثال الخاص بنا هنا:

الخطوة 6: إرسال القيم كرسائل راديو

الآن لديك بعض القيم جاهزة لإرسالها إلى الروبوت الخاص بك.

قم بتحرير الحلقة الرئيسية الخاصة بك ، بحيث تتحقق من قيم عصا التحكم ، ولكن بدلاً من طباعة القيم ، فإنها تجعلها جاهزة للإرسال كرسالة راديو.

احيانا صحيح:

جويستيك = joystick_push () message = str (جويستيك [0]) + "" + str (جويستيك [1])

هذا لن يرسل الرسالة بالفعل بعد!

ماذا يحدث في هذا السطر الجديد من التعليمات البرمجية؟

  • عصا التحكم [0] تعني أول جزء من المعلومات يخرج من وظيفة عصا التحكم (يسار)
  • عصا التحكم [1] هي الجزء التالي من المعلومات (يمين)
  • يحول str () كلا هذين الرقمين إلى تنسيق سلسلة (نص بدلاً من أرقام) - وهذا ضروري لتتمكن من إرسال المعلومات عبر الراديو.

ستعتاد على رؤية + بمعنى الإضافة - يمكن أن تضيف الأرقام معًا وتسلسل السلاسل ، مما يعني أنها ستلتصق بتقطتي المعلومات معًا.

مثال:

150 + 100 = 250

str (150) + str (100) = 150100

لذا فإن التسلسل سيثبت قيمك اليمنى واليسرى معًا.

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

أخيرًا ، قم بتمديد الرمز الخاص بك لإرسال هذه الرسالة التي تم إنشاؤها حديثًا عبر الراديو:

radio.send (رسالة)

ينام (10)

يعمل السكون على إبطاء إرسال الرسائل بحيث لا يتم تحميل micro: bit المتلقي بالكثير من المعلومات!

قم بتفليش هذا الرمز إلى وحدة التحكم micro: bit وصحح أي أخطاء قبل الانتقال إلى الخطوة التالية

الخطوة السابعة: استلام الرسائل على الروبوت الخاص بك

ارجع إلى رمز الروبوت الخاص بك من البداية - تذكر أن تفصل وحدة التحكم micro: bit حتى لا تومض رمز الروبوت عن طريق الخطأ

قم بالتمرير لأسفل إلى الحلقة الرئيسية - قم بإزالة رمز الاختبار وأضف هذا بدلاً من ذلك:

احيانا صحيح:

message = radio.receive () طباعة (رسالة) سكون (100)

يقوم هذا بتعيين متغير يساوي الرسالة الواردة ، ويطبع الرسالة إلى REPL - للتحقق من وصول الرسائل كما هو متوقع.

قم بتفليش الكود الجديد الخاص بك ، المتصل بـ REPL ، ثم اضغط على عصا التحكم.

يجب أن تحصل على شيء مثل هذا:

قيم REPL
قيم REPL

نصائح استكشاف الأخطاء وإصلاحها

إذا تلقيت رسالة خطأ على وحدة التحكم micro: bit… تصحيح رمز وحدة التحكم الخاصة بك

إذا تلقيت رسالة خطأ على الروبوت micro: bit … تم إرسال رسالة الراديو الخاصة بك بنجاح! لكن الروبوت لا يستطيع فهمها ، لذا تحقق من الرسالة التي أرسلتها والرسالة التي طلبت من الروبوت الاستماع إليها.

إذا لم يحدث شيء على الإطلاق

  • تأكد من وميض الكود الصحيح لكل ميكرو: بت - من السهل وميض الرمز الخطأ عن طريق الخطأ!
  • تأكد من تطابق أرقام القناة والمجموعة الخاصة بك على كل ميكرو: بت

الخطوة الثامنة: استخدام الرسائل الواردة للتحكم في محركات الروبوت

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

تحتاج إلى تقسيم هذه الرسالة إلى سلسلتين ، ثم تحويل السلاسل مرة أخرى إلى أرقام مرة أخرى ، وتمريرها إلى وظيفة محرك الأقراص. يحدث الكثير في وقت واحد!

قبل القيام بذلك ، تحتاج إلى التحقق من أن الرسالة التي تتلقاها بالتنسيق الصحيح.

إذا لم يتم إرسال أي رسائل ، فستتلقى "لا شيء" بدلاً من ذلك. إذا حاولت تقسيم هذا ، فستتلقى رسالة خطأ.

احيانا صحيح:

message = radio.receive () إذا لم تكن الرسالة لا شيء: message = message.split () drive (int (message [0]) ، int (message [1]))

ماذا يحصل هنا؟

  • سيتم تشغيل الكود الجديد إذا كانت الرسالة أي شيء بخلاف "لا شيء".
  • message.split () يتحقق من وجود مسافة في الرسالة (التي أضفناها في الخطوة الأخيرة) ، ويستخدم هذا لتقسيم الرسالة إلى قسمين.
  • int (message [0]) ، int (message [1]) تفعل عكس ما فعلناه في الخطوة السابقة - تحصل على كل معلومة على حدة وتحولها إلى عدد صحيح (عدد صحيح).
  • int (message [0]) تُستخدم كقيمة للمحرك الأيسر في وظيفة القيادة ، وتستخدم int (message [1]) كقيمة للمحرك الأيمن.

تحقق من أنها تعمل - هل تدور المحركات عندما تضغط على عصا التحكم؟

إن لم يكن - حان الوقت لبعض التصحيح!

إذا كانت الإجابة بنعم ، فهذا رائع! لديك روبوت يعمل بالتحكم عن بعد!

اقض بعض الوقت في التدريب مع الروبوت الخاص بك قبل الانتقال إلى الخطوة التالية. هل تقود بالطريقة التي تتوقعها؟

ستوضح لك الخطوات التالية كيفية استخدام الأزرار الموجودة على عصا التحكم لإضافة وظائف إضافية إلى الروبوت الخاص بك

إذا كنت تريد أن ترى نسختنا من هذا الرمز حتى الآن:

  • الروبوت:
  • وحدة التحكم:

الخطوة 9: استخدام الأزرار - استقبال رسائل إضافية

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

للسماح لـ micro: bit بتفسير الرسائل الأخرى ، ستحتاج إلى التحقق من كل رسالة متوقعة أولاً ، ثم تقسيم الرسالة فقط إذا لم يُطلب منها فعل أي شيء آخر بها.

قم بتوسيع الكود الخاص بك كما يلي:

إذا لم تكن الرسالة لا شيء:

if message == 'hello': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () drive (int (message [0]) ، int (message [1]))

أولاً ، سيتحقق مما إذا كان قد تلقى رسالة "مرحبًا". إذا كان الأمر كذلك ، فسيتم عرض صورة سعيدة ، ثم ارجع إلى أعلى الحلقة وتحقق من الرسالة التالية.

إذا لم تكن الرسالة مرحبًا ، فستتحقق بعد ذلك مما إذا كانت الرسالة "بطة".

إذا لم تكن الرسالة "مرحبًا" أو "بطة" ، فستقوم بآخر شيء في القائمة ، وهو تقسيم الرسالة وتشغيل المحركات. لن يحاول تقسيم الرسالة إذا تلقت "مرحبًا" أو "بطة" ، مما يعني أنك لن تتلقى رسالة خطأ من أي من هاتين الرسالتين.

تعد علامة المساواة المزدوجة مهمة - فهي تعني "يساوي" ، مقارنة بعلامة يساوي الفردية ، والتي تقوم بتعيين شيء ما (لذا فإن الرسالة = "مرحبًا" تعني أننا نقوم بتعيين المتغير على "مرحبًا" ، الرسالة == "مرحبًا" يعني أننا نسأل عما إذا كانت الرسالة تساوي "مرحبًا").

جربه بخيارين فقط الآن ، لاختباره - يمكنك إضافة العديد من الرسائل الأخرى كما تريد لاحقًا.

رابط لكود العمل:

الخطوة 10: إرسال رسائل إضافية باستخدام أزرار جهاز التحكم

افصل micro: bit من الروبوت الخاص بك ، وقم بتوصيل micro: bit الخاص بعصا التحكم بدلاً من ذلك

ارجع إلى رمز وحدة التحكم الخاص بك للتعديل.

على غرار رمز الروبوت ، نريد من وحدة التحكم التحقق مما إذا كنت تحاول إرسال أي رسائل أخرى ، قبل إرسال قيم عصا التحكم.

في الجزء العلوي من الحلقة ، ما زلنا نريدها أن تتحقق من القيم الحالية لعصا التحكم ، لكننا نريدها أيضًا أن تتحقق مما إذا كان الزر مضغوطًا حاليًا:

احيانا صحيح:

جويستيك = ذراع التحكم () زر = ضغط الزر ()

يعرض button_press () قيمة A أو B أو C أو D أو E أو F بناءً على الزر الذي يتم الضغط عليه حاليًا (إذا لم يتم الضغط على أي شيء ، فإنه يُرجع بلا).

يمكننا الآن إصدار عبارة if-elif-else ، كما فعلنا مع رمز الروبوت - باستخدام زرين ، وإرسال قيمة عصا التحكم إذا لم يتم الضغط على أي زر.

إذا كان الزر == 'A':

radio.send ('hello') sleep (500) elif button == 'B': radio.send ('duck') سكون (500) else: message = str (جويستيك [0]) + "" + str (جويستيك [1]) radio.send (رسالة) سكون (10)

عند الضغط على الزر ، أرسل إحدى الرسائل التي طلبت من الروبوت البحث عنها في الخطوة السابقة.

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

يؤدي النوم بعد إرسال الرسالة إلى إبطائها ، بحيث لا يقوم بفحص الزر مرة أخرى بسرعة كبيرة - جرب بعض الأرقام هنا للحصول على مقدار الوقت المثالي لك - ببطء شديد ولن يستجيب أيضًا بسرعة وسيتلقى الروبوت الخاص بك العديد من رسائل الأزرار التي قد تتوقف عن الاستجابة لعصا التحكم!

هل يعمل؟

إذا كنت تتلقى رسائل خطأ ، ففكر مليًا في ما قمت بتغييره للتو ، وما الذي يحدث.

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

رابط لكود العمل:

الخطوة 11: الخطوات التالية

لديك الآن المعرفة التي تحتاجها للعمل مع محركات الروبوت الخاص بك ، ومع عصا التحكم: وحدة التحكم في البت

استخدم هذه المعرفة لتحسين البرنامجين وجعلهما خاصين بك. بعض الأفكار أدناه!

لديك ستة أزرار على جهاز التحكم الخاص بك! ماذا تريد منهم أن يفعلوا؟

  • ماذا عن برمجة روتين رقص ليقوم الروبوت الخاص بك بأمره؟ اكتب خوارزمية لأوامر drive () ، مفصولة بأوامر sleep ()!
  • هل تريد تغيير الاتجاه الذي يتحرك فيه الروبوت حتى يتمكن من القيادة بسهولة رأسًا على عقب؟ فكر في قيمتي x و y لعصا التحكم. ماذا يمثلون وكيف يمكنك التلاعب بهم؟
  • هل يحتوي الروبوت الخاص بك (أو هل يمكنك إضافته!) على ميزات إضافية مثل مصابيح LED أو مكبر صوت أو أجهزة استشعار؟

أفكار لتحسين الكود

  • هل يمكنك مساعدة الروبوت الخاص بك على التعامل مع الرسائل غير المعروفة باستخدام رمز المحاولة / الاستثناء؟
  • لا تمنحنا الرياضيات المستخدمة لحساب القيم اليمنى واليسرى من عصا التحكم النطاق الكامل للقيم (يمكن أن يقبل محرك الروبوت رقمًا يصل إلى 1023). هل يمكنك تعديل هذا الرمز للحصول على نطاق أفضل؟
  • هناك طرق أخرى لخلط قيم عصا التحكم - هل يمكنك التوصل إلى طريقة أفضل للقيام بذلك؟

موصى به: