
برمجة نظام إشارة مرورية: رصد مركبة

قم بالترقية للحصول على المزيد من المحتوى
ما هي الرسالة التي يرسلها الراديو لإشارة المرور؟
هذه إشارة مرور. إنها حمراء، وهذه حافلة قادمة، وهي متأخرة. تخيل لو تمكنت الحافلة من الرجوع بجدولها الزمني حتى لا يكون عليها الانتظار عند الإشارة الحمراء! ماذا لو كان يمكن للحافلة تنبيه إشارة المرور بقدومها؟ سنقوم الآن ببرمجة حافلة لتتمكن من إرسال رسالة لإشارة المرور. سنستخدم إشارات الراديو للتواصل. قبل أن نبدأ، نحتاج لـ: متحكم مصغر بثلاث أضواء LED موصلة به، كما شرحنا في فيديو آخر، ومتحكم مصغر آخر يمثل الحافلة، وبرنامج للحافلة. نبدأ بالسودوكود للحافلة. سترسل الحالفة رسالة راديو لإشارة المرور. لتتمكن إشارة المرور من استقبال إشارة راديو الحافلة، عليها استخدام نفس التردد، اي نفس المجموعة الإذاعية نستخدم مجموعة الراديو "واحد". لذا فالسودوكود لبرنامج الراديو يبدأ بـ: إبدأ البرنامج. إضبط مجموعة الراديو لـ "واحد". تريد الحافلة أن يصبح الضوء أخضرا. عندما ترسل رسالة الـ "واحد" فإنها تعني "ها أنا قادمة، تحولي للأخضر". لكن متى على الحافلة إرسال الـ "واحد"؟ حسن، عندما تقترب من إشارة المرور. نختار توصيل ذلك بالزر A على المتحكم المصغر. لو ضُغِط الزر A، أرسل "واحد". هذا في الواقع كل ما نحتاجه لبرنامج الحافلة. ننتقل إذا لبرنامج إشارة المرور. تستقبل إشارة المرور نفس مجموعة الراديو التي ترسل عبرها الحافلة إشارتها. لذا سيتكون السودوكود لإشارة المرور أيضا: إبدأ البرنامج. إضبط مجموعة الراديو لـ "واحد". ليس على إشارة المرور الاستقبال فحسب، وإنما التفاعل كذلك مع كل رسالة من الحافلة. لتتمكن من الاستقبال والتفاعل بشكل دائم، فيجب أن نكتب كودا يعمل مرارا وتكرارا، لذا نستخدم loop بحالة متحققة دائما. يبدو هذا الجزء من الكود كالتالي: إشارة المرور تضيء الأحمر باستمرار الآن. حالما تستقبل إشارة المرور إشارة من الحافلة، ستتحول للأخضر: إمنح الأولوية للحافلة. نُكون المتغير "prio"الذي يتابع طلب الحافلة للأولوية. عندما يكون "prio" "صحيحا" تكون الأولوية للحافلة، وإلا فإن "prio" "خطأ". نضيف ذلك للسودوكود: لو استقبل الراديو "واحد" إضبط الـ "prio" لوضع "صحيح". عندما يكون "prio" "صحيحا" تتحول إشارة المرور للأخضر وإلا فإنها تظل حمراء. نضيف هذا الشرط: إلا لو كان "prio" يساوي "خطا". عندها فقط سيتحول الضوء إلى اللون الأحمر . نبوِّب الصف المتصل بصف "لو". لكن لو أن "prio" لا يساوي "خطأ"؟ نكتب: وإلا أطفئ الأحمر وشغل الأخضر. ينبغي أن تكون الإشارة حمراء عند بداية البرنامج، أي أن يكون "prio" "خطأ". هل نختبر السودوكود؟ أولا، يكون "prio" "خطأ" وإشارة المرور حمراء. يضغط سائق الحافلة على الزر، فيصبح "prio" "صحيحا". يقفز الكود لـ "وإلا" ويتحول الضوء للأخضر! لكنه لا يرجع للأحمر. هممم... لم نفكر في المدة التي يجب أن يظل الضوء أخضر خلالها، لن يعود "prio" إلى "خطأ" ثانية أبدا. لذا سنسمح بثلاثة ثوان لتتمكن الحافلة من عبور إشارة المرور بإضافة وقفة لمدة ثلاثة ثوان هنا. ثم نطفئ الضوء الأخضر ونضبط "prio" إلى "خطأ" ثانية ليضيء الضوء الأحمر مجددا. كل هذه الصفوف متصلة بجزء - وإلا. نوضح ذلك من خلال تبويبها. لنختبره ثانية. لدينا "prio" في حالة الـ "خطأ" وإشارة المرور حمراء. ها هي الحافلة المتأخرة قادمة، وتم ضغط الزر A و"prio" يصبح "صحيحا". يقفز البرنامج لـ "وإلا" ويصبح الضوء أخضرا، وبعد ثلاثة ثوان يصبح "prio" "خطأ" وترجع إشارة المرور حمراء ثانية. رغم أننا لم نبرمج الضوء الأصفر، وأن الإشارة تظل حمراء طالما لم تأت حافلة، إلا أنها بداية جيدة، وربما تُدرك هذه الحافلة جدولها الزمني. جيد!