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

أرسل بيانات رقمية من أردوينو إلى آخر: 16 خطوة
أرسل بيانات رقمية من أردوينو إلى آخر: 16 خطوة

فيديو: أرسل بيانات رقمية من أردوينو إلى آخر: 16 خطوة

فيديو: أرسل بيانات رقمية من أردوينو إلى آخر: 16 خطوة
فيديو: أردوينو للمبتدئين - (10) ارسال و استقبال الأوامر من شاشة السريال 2024, شهر نوفمبر
Anonim
أرسل بيانات رقمية من أردوينو إلى آخر
أرسل بيانات رقمية من أردوينو إلى آخر

مقدمة

بواسطة ديفيد بالمر ، CDIO Tech. في جامعة أستون.

هل احتجت يومًا إلى إرسال بعض الأرقام من Arduino إلى آخر؟ يوضح هذا Instructable كيف.

يمكنك بسهولة اختبار أنه يعمل ببساطة عن طريق كتابة سلسلة من الأرقام لإرسالها في محطة Serial Monitor ، ورؤية الأرقام تعود على شاشة تسلسلية ثانية متصلة بـ Arduino الثاني. يمكنك حتى استخدام رابط بلوتوث.

ماذا يفعل

يحتاج برنامجان من Arduino (الرسوم التخطيطية في Arduino) إلى التطوير ، أحدهما برنامج Master للاتصال بالكمبيوتر المضيف الذي يقوم بتشغيل Arduino Serial Monitor ، والآخر ليكون بمثابة Slave لتلقي الرسالة التسلسلية من Master ، وفك تشفيرها وإرسالها مرة أخرى. العبد قادر اختياريًا على عرض الأرقام التي يتعامل معها على جهاز المراقبة التسلسلي IDE الثاني - فقط في حالة رغبتك في استخدام هذا. قد يساعدك في جعل الأشياء تعمل في المقام الأول ، ويساعدك إذا قررت إجراء أي تغييرات على البرامج لتناسب متطلباتك الخاصة.

ادوات

  • 2 اردوينو
  • 2 خيوط USB
  • أسلاك التصحيح (حسب الحاجة)
  • 1 جهاز كمبيوتر / كمبيوتر محمول محمّل بـ Arduino IDE (متاح للتنزيل المجاني من موقع Arduino.cc)

الخطوة 1: الإعداد - قم بإعداد الجهاز أولاً

الإعداد - قم بإعداد أجهزتك أولاً
الإعداد - قم بإعداد أجهزتك أولاً
الإعداد - قم بإعداد أجهزتك أولاً
الإعداد - قم بإعداد أجهزتك أولاً

قم بتوصيل 2 Arduinos بمنافذ USB على جهاز الكمبيوتر الخاص بك.

نصيحة ، من الجيد تصنيفها على أنها M و S (السيد والعبد) حتى لا تدخل في حالة من الفوضى لاحقًا (كما هو موضح في الصورتين هنا.)

الخطوة 2: الإعداد - ضبط شاشتك

الإعداد - اضبط شاشتك
الإعداد - اضبط شاشتك

أفضل شيء هو إعداد شاشتك بحيث يكون لديك

  • IDE محملاً ببرنامج Master على اليسار و
  • هذا مع العبد على اليمين.

احتفظ بشاشات Serial Monitors لـ Maser و Slave على اليسار واليمين أيضًا كما هو موضح في لقطة الشاشة هنا.

الخطوة 3: قم بإعداد Master End ، ثم قم بالاتصال معًا - الجزء 1

قم بإعداد Master End ، ثم اتصل معًا - الجزء 1
قم بإعداد Master End ، ثم اتصل معًا - الجزء 1

عندما تقوم بإعداد Master End Serial Monitor لإرسال رقمين ، يجب عليك دائمًا استخدام أحرف البداية والنهاية ومحدد الفاصلة وحرف الفاصلة كما ترى هنا.

أنت الآن بحاجة إلى توصيل 2 Arduino معًا عبر المسلسل. يتم ذلك باستخدام اثنين من الأسلاك التصحيح.

لقد استخدمت الأخضر والأصفر

  • خذ اللون الأصفر أولاً ، يجب أن يتم توصيله بـ D6 في أحد Arduino و D7 في الثاني
  • ثم عكس السلك الأخضر ، D7 في الأول و D6 في الثاني من Arduino.

بدلاً من ذلك ، إذا كان لديك شيء متاح مثل زوج من وحدات Bluetooth - مثل HC-05 - فستعمل هذه أيضًا على منحك نفس التأثير تمامًا مثل الأسلاك أعلاه.

الخطوة 4: قم بإعداد Master End ، ثم قم بالاتصال معًا - الجزء 2

قم بإعداد Master End ، ثم اتصل معًا - الجزء 2
قم بإعداد Master End ، ثم اتصل معًا - الجزء 2
قم بإعداد Master End ، ثم اتصل معًا - الجزء 2
قم بإعداد Master End ، ثم اتصل معًا - الجزء 2

نحن نستفيد من مكتبة البرامج التسلسلية. يتوفر مزيد من المعلومات مع هذا الرابط

يمكنك أن ترى أنه تم استدعاؤه في السطر 7 من أي من البرنامجين. يقوم بتكوين الدبابيس الرقمية 7 و 6 مثل TX و RX (الإرسال والاستقبال). هذه هي الطريقة التي ستنتقل بها البيانات من Master Arduino عبر السلك الأخضر إلى Slave ، وعندما ينتهي برنامج Slave في Arduino الثاني من عمله ، عبر السلك الأصفر. في الجزء السفلي من الرسم التوضيحي نفسه (في نافذة Serial Monitor) ، يمكنك رؤية البيانات التي أرسلناها قد نجحت الآن في الالتفاف حول الحلقة الموضحة هنا ، والعودة إلى الكمبيوتر الشخصي حيث تم فصل زوج الأعداد الصحيحة بشكل جيد.

الخطوة 5: نظرة عامة على الرسومات التخطيطية / البرامج - هيكل البرنامج

نظرة عامة على الرسومات / البرامج - هيكل البرنامج
نظرة عامة على الرسومات / البرامج - هيكل البرنامج
نظرة عامة على الرسومات / البرامج - هيكل البرنامج
نظرة عامة على الرسومات / البرامج - هيكل البرنامج

التخطيط كما هو الحال في جميع رسومات Arduino هناك 3 أجزاء أساسية:

  • الإعلانات
  • وانشاء
  • الحلقة الرئيسية

كما يحدث غالبًا ، استخدمنا هنا القسم الرابع وهو إضافة "الوظائف". إذا لم تكن معتادًا على استخدام الوظائف ، فيمكنك استخدام Google لـ "وظائف Arduino" وستجد مواقع شرح مثل المثال الموجود في هذا الرابط: www.tutorialspoint.com/arduino/arduino_functions…..

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

يمكن رؤية الكتل الثلاثة التي استخدمناها في الجزء العلوي من كل رسم توضيحي لنوافذ IDE أعلاه:

  • simpleRxTx0330Master
  • مشترك
  • ملحوظات

هذه في الواقع ملفات منفصلة داخل مجلد البرنامج ، كما ترى في عرض Windows Explorer لملفات برنامج Slave.

هناك سبب وجيه للغاية لفعلنا هذا.

  • أثناء قيامنا ببناء البرنامج ، أدركنا أن معظم برنامج Master كان هو نفسه لبرنامج Slave.
  • انتهى بنا الأمر إلى سحب جميع الأجزاء المشتركة في علامة تبويب ، والتي أطلقنا عليها بالتالي اسم "عام" ، ثم في كل مرة قمنا فيها بتصحيح جزء (اختبرناه ، وكنا راضين أنه يعمل بشكل جيد) قمنا فقط بنسخ علامة التبويب هذه ولصقها عبر من Master إلى Slave ، أو العكس بالعكس.
  • تصادف أن تكون علامات تبويب الملاحظات متطابقة ، لأن التصميم عام.

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

الخطوة 6: تصميم من أعلى إلى أسفل

إنها فكرة جيدة أن تقوم بتصميم رسمك التخطيطي بدءًا من تعريف ما تريد القيام به.

بمجرد حصولك على هذا ، يمكنك البدء في جعل الرسم يقوم بهذه الأشياء. بشكل عام ، إذا كانت هناك تفاصيل لا تعرف كيفية القيام بها حتى الآن ، فما عليك سوى جعلها وظيفة ، وترك إنشاء الوظيفة حتى وقت لاحق.

يتبع هذا فلسفة التصميم الجيد ، التي يتم تدريسها في العديد من الجامعات ، والتي تسمى CDIO (إذا كنت لا تعرف هذا بالفعل ، فيمكنك البحث في Google ، والعثور على مواقع لشرحها مثل: https://www.cdio.org/s.) يقول هذا بشكل أساسي: لا تبدأ التصميم قبل أن يكون المفهوم واضحًا. لا تبدأ التنفيذ حتى تحصل على التصميم واضحًا. لا تتوقع أن تعمل قبل أن تحصل على التنفيذ الواضح. C أولاً ، ثم D ، I ، و O. في كل مرحلة لاحقة ، تقوم بالتكرار (ارجع للخلف حول الحلقة (الحلقات) ، لذلك بمجرد أن تكون سعيدًا بحلقة التصميم الأولية الخاصة بك مرة أخرى وتحقق من أنها لا تزال تفي بالمفهوم ، وقم بالتحديث C إذا كنت بحاجة إلى ذلك. وهكذا ، لذا حتى عندما يكون عليك تشغيل ، فارجع إلى الأعلى ، وشاهد مرة أخرى كيف تبدو C الآن ، ثم D وأنا ، وقم بعمل وتحقق من جميع يتغير حسب الضرورة. مع اسكتشات البرمجة يعمل هذا بنفس الطريقة إذا كنت تصمم من أعلى لأسفل.

الخطوة 7: المفهوم والتصميم - الجزء 1

المفهوم والتصميم - الجزء الأول
المفهوم والتصميم - الجزء الأول
المفهوم والتصميم - الجزء الأول
المفهوم والتصميم - الجزء الأول

المفهوم هنا يشبه متطلبات المخطط التفصيلي المذكورة في علامة التبويب "الملاحظات".

قد يبدو التصميم وكأنه نسخة مبكرة من الحلقة ، والتي تتطابق مع علامة تبويب الملاحظات ويمكن أن تبدو كما تراه في هذا الشكل

انظر كيف أحب أن أبدأ من خلال نسخ التعليقات على CTRL-C في رأس الحلقة أولاً ، ثم ابدأ في ملء الفراغات بالأوامر التي ستقوم بهذه الأشياء.

هذا في الواقع يجمع جيدًا كما ترون في أسفل الشاشة في الشكل. يصل هذا من مرحلة CDIO D إلى المرحلة الأولى ، وبينما نقوم بتطوير الكود ، من الجيد الاستمرار في جولة حلقة D-I هذه.

حان الوقت الآن للانتقال إلى المرحلة التالية ، هناك تعليق يقول إننا سنستقبل شيئًا ما من جهاز USB ، ثم سنرسله إلى القناة التسلسلية للبرنامج. نكتب هذا الرمز لتحقيق ذلك - الأسطر من 133 إلى 138 الموضحة هنا في قلم التمييز الأصفر

الخطوة الثامنة: المفهوم والتصميم - الجزء الثاني

المفهوم والتصميم - الجزء الثاني
المفهوم والتصميم - الجزء الثاني
المفهوم والتصميم - الجزء الثاني
المفهوم والتصميم - الجزء الثاني

أول وظيفتين نقدمهما هنا هما (recv () و tran () للقيام بالاستقبال من منفذ الأجهزة والإرسال إلى منفذ البرنامج - ومن ثم يتم استدعاؤهما باستخدام معلمات 'hw' أو 'sw' الموضحة.

بالإضافة إلى ذلك ، قمنا بإضافة اختبار على متغير عام يسمى newData. هذه علامة سنضعها داخل وظيفة "void recv ()؛". عند استلام رسالة ، يتم تمييز هذا المتغير من خطأ إلى صحيح. نقوم بذلك حتى لا ننقل رسالة إلا إذا تم استلامها (العلم == صحيح) في السطر 134. وبمجرد أن نرسل رسالتنا ، فإن هذه "المهمة تم إنجازها" لذلك نقوم بمسح العلامة إلى false مرة أخرى في السطر 137.

مرة أخرى يمكننا التحقق من الترجمة (من D إلى I) ، وهذه المرة لدينا رسالة خطأ "غير مصرح بها" (معروضة). هذا يخبرنا أننا لم نعلن عن recv () ؛ وظيفة. نحن نخطط للقيام بذلك لاحقًا ، لذلك فقط الآن للسماح لنا بالحصول على تجميع نظيف نحتاج إلى إنشاء وظيفة وهمية أو عنصر نائب ، كما هو موضح لاحقًا.

مرة أخرى يمكننا التحقق من التحويل البرمجي (D إلى I) ، وهذه المرة لدينا رسالة خطأ أخرى "غير مصرح بها" لـ tran () ؛ وظيفة. هذا يحتاج إلى إنشاء كعب مماثل. مرة أخرى يمكننا التحقق من الترجمة (من D إلى I) ، وهذه المرة سنجد أن هذا يعمل بشكل مثالي ؛ حتى الان جيدة جدا.

الخطوة 9: قم بإنهاء الحلقة الرئيسية: أ) الاستلام من USB ، ب) الاستلام من Slave Arduino

قم بإنهاء الحلقة الرئيسية: أ) الاستلام من USB ، ب) الاستلام من Slave Arduino
قم بإنهاء الحلقة الرئيسية: أ) الاستلام من USB ، ب) الاستلام من Slave Arduino
قم بإنهاء الحلقة الرئيسية: أ) الاستلام من USB ، ب) الاستلام من Slave Arduino
قم بإنهاء الحلقة الرئيسية: أ) الاستلام من USB ، ب) الاستلام من Slave Arduino

هناك قطعة أخيرة أضفناها لإنهاء هذا الجزء وهي إضافة بعض كود التصحيح.

هناك تعليمات أخرى حول تصحيح الأخطاء يمكن الإشارة إليها لفهم ما فعلناه هنا ولماذا. الرجوع إلى Instructable "كيفية بناء واختبار رسومات Arduino حتى تعمل"

لذا فإن سطور التصحيح هذه [136-139 موضحة] تتم إضافتها بعد ذلك في الحلقة الرئيسية ، ويمكنك اختبارها في النهاية الرئيسية بجعل متغير التصحيح صحيحًا ، ثم التحويل البرمجي (I) ، ثم إذا تقوم بتوصيل Arduino حتى يمكنك تحميله ، وفتح Serial Monitor ومعرفة ما إذا كان ما يعود إلى Serial Monitor كما هو موضح هنا (هل ترى رسالة "DEBUG MODE" مضافة؟)

الخطوة 10: استلام ومعالجة البيانات في Slave Arduino

استلام ومعالجة البيانات في Slave Arduino
استلام ومعالجة البيانات في Slave Arduino
استلام ومعالجة البيانات في Slave Arduino
استلام ومعالجة البيانات في Slave Arduino

الاستلام من Slave Arduino

أضف الكود اللازم للقناة الثانية إلى الحلقة الرئيسية ، جهاز الاستقبال التسلسلي للبرنامج كما هو موضح - الأسطر من 149 إلى 155.

هل يمكنك أن ترى أن الهيكل يعتمد بشكل فضفاض على ما كتبناه أعلاه للحالة الرئيسية؟

سترى أيضًا أننا حصلنا على خطأ في المترجم ، وظيفة أخرى غير معلنة - هذه المرة parseData () ؛ - لذلك نحن بحاجة إلى عمل أبتر لهذا أيضًا ، قبل أن نتمكن من تشغيل تجميع اختبار خالٍ من الأخطاء.

التعامل مع البيانات في Slave Arduino

أضف رمز الحلقة الرئيسية المطلوب لـ Arduino إذا تم تكوينه كجهاز تابع كما هو موضح - الأسطر من 163 إلى 174. هل ترى أن هيكله مشابه جدًا لهيكل القناة الأولى؟

ويجب أن تجد هذه المرة أنه يجمع جيدًا تمامًا.

الخطوة 11: اكتب وظيفة الاستلام

اكتب وظيفة الاستلام
اكتب وظيفة الاستلام

وظيفة الاستلام - void recv (char from) {} - لها وظيفتان رئيسيتان.

1 لتلقي سلسلة من الأحرف من قناة USB ، و

2 لاستقبال واحد من قناة Arduino إلى Arduino.

بالنسبة للأول ، سنحتاج إلى استخدامه لأنه يستخدم جهاز UART المدمج في Arduino ، وللثاني باستخدام مكتبة Arduino القياسية: برنامج UART.

عندما نبدأ في إضافة رمز إلى دالة - لإنشاء دالة تقوم بشيء ما ، بدلاً من كعب روتين فقط - علينا أن نتذكر إزالة كعب الروتين الذي يستبدله أو التعليق عليه. وإلا فإننا نحصل على خطأ في الترجمة: إعادة تعريف "void lrec (char)".

جرب واحصل على الخطأ ، ثم جرب إحدى الطرق المقترحة أعلاه للتخلص منه.

ابدأ بوظيفة تشبه تلك التي نعرضها هنا للخطوط من 75 إلى 88 باللون الأصفر.

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

دعنا الآن نلقي نظرة على الكود الذي كتبناه لوظيفة recv ().

إنه نظيف تمامًا ، يمكنك أن ترى استخدام شرط "if" لإنتاج جزأي الوظيفة المشار إليهما أعلاه.

الكود الموجود داخل الجزء "sw" والجزء "hw" لهما نفس الشكل ، وسوف أصفه هنا.

أول زوج من الخطوط في كل حالة هو بداية حلقة while. إذا لم تكن معتادًا على while's ، فيمكنك البحث عنها في موقع Arduino.cc/Reference للحصول على الشرح والأمثلة. نحن هنا ننتظر "بينما" لم تتلق وظيفة "Serial" المضمنة أي حرف (أحرف) ولأن متغير newData قد تم إيقاف تشغيله (أي أن newData == حالة خطأ صحيحة). حالما يتم استلام شخصية - أو أكثر من حرف واحد - سوف "تنخفض" إلى السطر الثاني في هذا الزوج. سيؤدي ذلك بعد ذلك إلى استدعاء recAstringChar (char) ؛ وظيفة للتعامل مع الحرف الحالي. سيتبادل هذا الزوج من الأسطر بعد ذلك أثناء (أو طالما) هناك أي أحرف لا تزال بحاجة إلى أن يتم استلامها. بمجرد الانتهاء من كل ذلك ، تنتهي الحالة while ، مما يسمح للمستوى التالي if or else بالنهاية ، وبالتالي السماح لـ rec (char) ؛ وظيفة لإنهاء. وهكذا وصلت الآن رسالة كاملة النحلة.

الخطوة 12: اكتب وظيفة الاستلام الفرعية - الجزء 1

اكتب وظيفة الاستلام الفرعية - الجزء 1
اكتب وظيفة الاستلام الفرعية - الجزء 1
اكتب وظيفة الاستلام الفرعية - الجزء 1
اكتب وظيفة الاستلام الفرعية - الجزء 1

نحتاج الآن إلى كتابة دالة تسمى recAstringChar (char) ؛. ترى من التعليق إلى السطر 50 هنا في الجزء العلوي ، أن وظيفته هي تحديث مخازن مؤقتة بنسخ من الرسالة التسلسلية الواردة. [اتضح أثناء محاولتي تشغيل كل هذا أن هناك شيئًا واحدًا تعلمته هو أنني كنت بحاجة لمخزنين مؤقتين مختلفين - أو على الأقل كانت هذه هي أسهل طريقة للتغلب على بعض المشكلات ، ومن ثم تطورت نوعًا ما إلى حاجتين مؤقتتين ، لذلك لقد صنعتهم للتو.] لقد اتصلت بمخزن مؤقت واحد: ReceivedData ، والآخر: Recehars.

المخازن المؤقتة عبارة عن متغيرات عامة ، لذلك يتم الإعلان عنها على مستوى الوحدة النمطية ، انظر السطرين 9 و 10 من علامة التبويب المشتركة. هناك متغيرات أخرى تم الإعلان عنها داخل هذه الوظيفة والتي لها بالتالي نطاق محلي - كما هو موضح في السطور 51-54 هنا. ليس هذا هو المكان المناسب لشرح الاختلافات بين سكان الكرة الأرضية والسكان المحليين ، ولكن هناك المزيد من المعلومات حول هذا في https://www.arduino.cc/glossary/en/ ضمن Local and Global.

يمكنك أيضًا معرفة كل شيء عن أنواع البيانات ومعدلات النوع: ثابت ، منطقي ، بايت ، const ، char في https://www.arduino.cc/reference/en/#variables ، الموضح هنا.

يتم التحكم في تدفق البرنامج الرئيسي في هذه الوظيفة بواسطة if في السطر 56 هنا ، وما يقابله في السطر 74. ويتعامل هذا مع سيناريوهين

أ) [من السطر 74 في] عندما تبدأ الرسالة المستلمة. يحدث هذا عندما يتم رصد startMarker - وقد تم تعريفه على أنه الحرف "<" ، ولهذا السبب كلما اختبرنا الرسم التخطيطي ، نبدأ دائمًا السلسلة الخاصة بنا بهذا الحرف. إذا لم نفعل ذلك ، فلن تتم معالجة أي شيء على أنه تم استلامه ، فسيتم تجاهله تمامًا كما لو أننا نكتب هراء في موجه لوحة المفاتيح "Serial Monitor".

ب) [الأسطر 56 إلى 73] التي تتلقى جميع الأحرف الأخرى ، مهما كانت ، لكنها تتعامل فقط مع الأحرف بعد حدوث بداية صحيحة (تم استلام ">" كما في أ) أعلاه.)

في هذه السطور (من 74 إلى 78) نضع المستلم <في أحد المخازن المؤقتة (المستلمة [0]) ولكن ليس في الآخر. نقوم بضبط مؤشر المخزن المؤقت (المتغير: char ndx) للإشارة إلى موضع المخزن المؤقت التالي (ReceivedData [1]) باستخدام الأمر post-increment (++) في السطر ndx ++ ؛ ، وقمنا بتعيين علامة قيد التقدم على "صحيح".

يتم التحكم في تدفق البرنامج في هذا الجزء من الوظيفة بواسطة if في السطر 57 هنا ، وما يقابله في السطر 65. ويتعامل هذا مع سيناريوهين

أ) [من السطر 65 فصاعدًا] عند انتهاء الرسالة المستلمة. يحدث هذا عندما يتم رصد endMarker - المُعرَّفة على أنها> ، ولهذا السبب كلما اختبرنا رسمنا التخطيطي ، فإننا دائمًا ما ننهي السلسلة بهذه الشخصية. أحد الأشياء التي تحدث عند استلام الحرف النهائي هو أن العلامة العالمية (متغير تقنيًا) newData يتم ضبطها على "true" تمامًا كما تنتهي الوظيفة ، بحيث تكون الوظيفة التي تسمى وظيفتنا الفرعية (دالة الاستدعاء: recv (char) ؛) يمكنه "معرفة" أن البيانات الجديدة الصالحة قد تم استلامها كاملة.

ب) [الأسطر 57 إلى 64] الذي يتلقى جميع الأحرف الأخرى ، مهما كانت. إنها تقوم فقط بإيقافهم بشكل مرتب في صفوف في كل من المخازن المؤقتة.

الخطوة 13: اكتب وظيفة الاستلام الفرعية - الجزء 2

اكتب وظيفة الاستلام الفرعية - الجزء 2
اكتب وظيفة الاستلام الفرعية - الجزء 2
اكتب وظيفة الاستلام الفرعية - الجزء 2
اكتب وظيفة الاستلام الفرعية - الجزء 2

قد يكون من المفيد إعطاء مثال على شكل المخازن المؤقتة 2 عندما يتم ملؤها. إذا أردنا إدخال الإدخال ، فستحتوي المخازن المؤقتة على الأحرف الموضحة فيها:

الآن يمكنك أن ترى أن لدينا مخزنًا مؤقتًا واحدًا هو بالضبط جميع الأحرف نفسها التي كتبناها لأول مرة ، ومخزن مؤقت واحد يحتوي فقط على القيمتين وفاصلة فصل. الآن لدينا بعض التعليمات البرمجية التي يمكنها استقبال الأحرف التي نكتبها في لوحة مفاتيح Serial Monitor ، يمكننا الانتقال من مرحلة CDIO الأولى إلى المرحلة O ، وكتابة بعض السلاسل ومعرفة ما يحدث. قم بتحميل الكود إلى Master Arduino ، وافتح Serial Monitor وحاول كتابة شيء صالح ، مثل enter. هل تتلقى صدى على شاشة Serial Monitor مثل الشاشة الموضحة هنا؟

الخطوة 14: اكتب وظائف الإرسال والتحليل

اكتب وظائف الإرسال والتحليل
اكتب وظائف الإرسال والتحليل
اكتب وظائف الإرسال والتحليل
اكتب وظائف الإرسال والتحليل

الأول للإرسال

حتى الآن تلقينا سلسلة نصية ، يمكننا كتابة دالة الإرسال: tran (char)؛ ليحل محل كعبها. سيسمح لنا ذلك بإرسال سلسلة من Master إلى Slave Arduino ،

لذا تأكد من توصيل كلا الجهازين وتوصيلهما معًا لاختبار هذه الوظيفة الجديدة.

أدخل هذه الوظيفة كما هو موضح هنا في الأسطر 117 إلى 133. كما ستعرف ، فهي تتكون من جزأين ، أحدهما للإرسال إلى قناة USB (الجهاز UART) والآخر للإرسال إلى Arduino (برنامج UART). - مجاني ، ويمكنك تحميل الرسم على الفور ومعرفة ما سيحدث. هذه المرة سأرسل. هل تظهر النتيجة؟

لقطة الشاشة مثيرة للاهتمام لأن السلسلة المتلقاة … يجب أن تبدو صحيحة كما كانت من قبل ، والسلسلة المرسلة … يجب أن تبدو الآن صحيحة. ومع ذلك ، لاحظ أن التحويل الصحيح لم ينجح. لا يزال هناك المزيد من التعليمات البرمجية التي يجب إضافتها لإنجاح هذا العمل.

الخطوة 15: اكتب وظائف الإرسال والتحليل

اكتب وظائف الإرسال والتحليل
اكتب وظائف الإرسال والتحليل
اكتب وظائف الإرسال والتحليل
اكتب وظائف الإرسال والتحليل

ثم للتحليل

هذا جزء من الكود يوزع السلسلة المتلقاة لإحضار السلاسل الجزئية الرقمية وتحويلها إلى قيم صحيحة. إنها بيانات parseData () الفارغة ؛ وظيفة الحلقة الرئيسية

استبدل كعب التحليل بالرمز الموضح في الأسطر 98 - 113. قم بتحميله ، ودعنا نرى ما إذا كانت المشكلة التي كنا نواجهها مع قيمتي العدد الصحيحين قد تم إصلاحها الآن. لنحاول.

نعم ، إنه يعمل ، كما هو موضح ، الأعداد الصحيحة التي تم العثور عليها هي 49 و 98.

الخطوة 16: النهاية

خاتمة!
خاتمة!

تم نقل هذه البيانات مباشرة حول الحلقة من الكمبيوتر الشخصي عبر Master عبر التابع والعودة عبر Master مرة أخرى إلى الكمبيوتر الشخصي مرة أخرى. مع الإصدار النهائي من Common الذي تم تحميله في كل من نهايتي Master و Slave ، ومع إيقاف تشغيل وضع التصحيح الآن ، يمكننا رؤية البيانات المستلمة بشكل صحيح في كلا الطرفين كما هو موضح هنا.

موصى به: