فهرست مطالب:

ارسال داده های عددی از یک آردوینو به دیگری: 16 مرحله
ارسال داده های عددی از یک آردوینو به دیگری: 16 مرحله

تصویری: ارسال داده های عددی از یک آردوینو به دیگری: 16 مرحله

تصویری: ارسال داده های عددی از یک آردوینو به دیگری: 16 مرحله
تصویری: How to use TM1637 4 digits seven segment display with Arduino 2024, جولای
Anonim
ارسال داده های عددی از یک آردوینو به دیگری
ارسال داده های عددی از یک آردوینو به دیگری

معرفی

توسط دیوید پالمر ، CDIO Tech. در دانشگاه استون

آیا تا به حال نیازی به ارسال تعدادی شماره از یک آردوینو به دیگری داشته اید؟ این دستورالعمل نشان می دهد که چگونه

می توانید به سادگی با تایپ رشته ای از اعداد برای ارسال در پایانه Serial Monitor ، تست کنید و ببینید که اعداد در مانیتور سریال دوم متصل به آردوینو دوم ظاهر می شوند. حتی می توانید از پیوند بلوتوث استفاده کنید.

چکار میکند

دو برنامه آردوینو (طرح هایی در آردوینو صحبت می کند) نیاز به توسعه دارند ، یکی برنامه اصلی برای اتصال به رایانه میزبان که مانیتور سریال آردوینو را اجرا می کند ، و دیگری به عنوان Slave برای دریافت پیام سریال از Master ، رمزگشایی و ارسال مجدد. برده به صورت اختیاری قادر است اعداد موردنظر خود را در مانیتور سریال IDE دوم نمایش دهد - فقط در صورت تمایل به استفاده از آن. ممکن است در وهله اول به کارکردن کارها کمک کند و اگر تصمیم می گیرید هر گونه تغییری در برنامه ها با توجه به نیاز خود ایجاد کنید ، به شما کمک می کند.

تجهیزات

  • 2 آردوینو
  • 2 عدد سیم USB
  • وصله سیم (در صورت نیاز)
  • 1 رایانه/لپ تاپ بارگذاری شده با Arduino IDE (قابل بارگیری رایگان از وب سایت Arduino.cc)

مرحله 1: راه اندازی - ابتدا سخت افزار خود را تنظیم کنید

راه اندازی - ابتدا سخت افزار خود را تنظیم کنید
راه اندازی - ابتدا سخت افزار خود را تنظیم کنید
راه اندازی - ابتدا سخت افزار خود را تنظیم کنید
راه اندازی - ابتدا سخت افزار خود را تنظیم کنید

2 آردوینو را به 2 پورت USB کامپیوتر خود وصل کنید.

نکته ، ایده خوبی است که آنها را با M و S (استاد و برده) برچسب گذاری کنید تا بعداً دچار مشاجره نشوید (همانطور که در 2 عکس اینجا نشان داده شده است).

مرحله 2: راه اندازی - صفحه خود را تنظیم کنید

راه اندازی - صفحه خود را تنظیم کنید
راه اندازی - صفحه خود را تنظیم کنید

بهترین کار این است که صفحه خود را طوری تنظیم کنید که داشته باشید

  • IDE با برنامه Master در سمت چپ بارگذاری شده و
  • که با Slave در سمت راست.

همانطور که در تصویر اینجا نشان داده شده است ، مانیتورهای سریال Maser و Slave را در سمت چپ و راست نگه دارید.

مرحله 3: Master End را تنظیم کنید ، سپس با هم متصل شوید - قسمت 1

Master Master را تنظیم کنید ، سپس با هم متصل شوید - قسمت 1
Master Master را تنظیم کنید ، سپس با هم متصل شوید - قسمت 1

هنگامی که Master End Serial Monitor خود را برای ارسال دو شماره تنظیم می کنید ، همیشه باید از ابتدا و انتها ، کاراکترهای محدود کننده و کاراکتر جداکننده کاما همانطور که در اینجا می بینید استفاده کنید.

اکنون باید 2 آردوینو را به صورت سریال به یکدیگر متصل کنید. این کار با دو سیم پچ انجام می شود.

من از رنگ سبز و زرد استفاده کردم

  • ابتدا رنگ زرد را انتخاب کنید ، این باید در یک آردوینو به D6 و در دومی D7 متصل شود
  • سپس برعکس سیم سبز ، D7 در اول و D6 در آردوینو دوم.

متناوبا ، اگر چیزی مانند یک جفت ماژول بلوتوث در دسترس دارید - مانند HC -05 - اینها نیز دقیقاً همان تأثیر سیمهای بالا را به شما می دهند.

مرحله 4: Master End را تنظیم کنید ، سپس با هم متصل شوید - قسمت 2

Master Master را تنظیم کنید ، سپس با هم متصل شوید - قسمت 2
Master Master را تنظیم کنید ، سپس با هم متصل شوید - قسمت 2
Master Master را تنظیم کنید ، سپس با هم متصل شوید - قسمت 2
Master Master را تنظیم کنید ، سپس با هم متصل شوید - قسمت 2

ما از کتابخانه سریال نرم افزار استفاده می کنیم. اطلاعات بیشتر با این پیوند در دسترس است

می توانید آن را در خط 7 هر یک از برنامه ها مشاهده کنید. پین های دیجیتال 7 و 6 را به صورت TX و RX (ارسال و دریافت) پیکربندی می کند. اینگونه است که داده ها از طریق Master Arduino از طریق سیم سبز به Slave منتقل می شوند ، و هنگامی که برنامه Slave در آردوینو دوم کار خود را به پایان رساند ، از طریق سیم زرد باز می گردد. در انتهای همان تصویر (در پنجره Serial Monitor) می توانید داده هایی را که منتقل کرده اید ، با موفقیت دور از حلقه ای که در اینجا شرح داده شده ، پشت سر گذاشته و با جدا شدن جفت اعداد صحیح به کامپیوتر بازگردید.

مرحله 5: نمای کلی طرح ها / برنامه ها - ساختار برنامه

مروری بر طرح ها / برنامه ها - ساختار برنامه
مروری بر طرح ها / برنامه ها - ساختار برنامه
مروری بر طرح ها / برنامه ها - ساختار برنامه
مروری بر طرح ها / برنامه ها - ساختار برنامه

چیدمان مانند همه طرح های آردوینو ، 3 قسمت اساسی وجود دارد:

  • اعلامیه ها
  • راه اندازی
  • حلقه اصلی

همانطور که اغلب اتفاق می افتد ، ما در اینجا از بخش 4 استفاده کرده ایم که افزودن "توابع" است. اگر با استفاده از توابع آشنا نیستید می توانید برای "توابع آردوینو" گوگل کنید و سایتهای توضیحی مانند مثال را در این پیوند خواهید یافت: www.tutorialspoint.com/arduino/arduino_functions…. به

ما همچنین از برگه ها برای جدا کردن برنامه به بلوک های قابل مدیریت بیشتر استفاده کرده ایم.

سه بلوک مورد استفاده ما را می توانید در بالای هر تصویر از پنجره های IDE در بالا مشاهده کنید:

  • simpleRxTx0330Master
  • مشترک
  • یادداشت

اینها در واقع فایلهای جداگانه ای در داخل پوشه برنامه هستند ، همانطور که در این نمای Windows Explorer از فایلهای برنامه Slave مشاهده می کنید.

دلیل بسیار خوبی برای انجام این کار وجود دارد.

  • هنگامی که در حال ساخت برنامه بودیم ، متوجه شدیم که بیشتر برنامه برای استاد همان برنامه برای برده بود.
  • در نهایت همه قسمت های معمولی را به یک برگه کشیدیم ، که ما آن را "معمولی" نامگذاری کردیم ، و سپس هر بار که بخشی را اشکال زدایی کردیم (آن را آزمایش کردیم و راضی بودیم که خوب کار کرد) فقط کل آن برگه را کپی و چسباندیم روبروی Master to Slave یا برعکس.
  • برگه های یادداشت نیز یکسان هستند ، زیرا طرح کلی است.

هیچ یک از توابع از setup نامیده نمی شوند ، همه آنها از حلقه نامیده می شوند ، بنابراین ما آنها را بعد از راه اندازی اما قبل از حلقه ایجاد کرده ایم.

مرحله 6: طراحی از بالا به پایین

ایده خوبی است که طرح خود را با تعریف آنچه می خواهید انجام دهید طراحی کنید.

وقتی این کار را انجام دادید ، می توانید طرح را برای انجام این کارها شروع کنید. به طور کلی اگر جزئیاتی وجود دارد که هنوز نمی دانید چگونه انجام دهید ، فقط آن را به یک تابع تبدیل کنید و ایجاد تابع را به بعد موکول کنید.

این از فلسفه طراحی خوب که در بسیاری از دانشگاهها به نام CDIO آموزش داده می شود پیروی می کند (اگر قبلاً این یکی را نمی شناسید ، می توانید آن را در گوگل جستجو کنید ، و سایت هایی برای توضیح آن پیدا کنید مانند: https://www.cdio.org/s.) این اساساً می گوید: قبل از اینکه مفهوم را روشن کنید ، طراحی را شروع نکنید. تا زمانی که طراحی را روشن نکرده اید ، پیاده سازی را شروع نکنید. انتظار نداشته باشید که قبل از اینکه پیاده سازی را روشن کنید ، کار کند. ابتدا C ، سپس D ، I و O. در هر مرحله بعدی تکرار کنید (به حلقه (حلقه ها) برگردید ، بنابراین هنگامی که از حلقه اولیه Design خود راضی هستید ، بررسی کنید که آیا هنوز با مفهوم مطابقت دارد و به روز کنید) در صورت لزوم C در صورت لزوم تغییر می کند.

مرحله 7: مفهوم و طراحی - قسمت 1

مفهوم و طراحی - قسمت 1
مفهوم و طراحی - قسمت 1
مفهوم و طراحی - قسمت 1
مفهوم و طراحی - قسمت 1

مفهوم در اینجا شبیه الزامات کلی است که در برگه "یادداشت ها" بیان شده است."

طراحی می تواند شبیه نسخه اولیه حلقه باشد که با برگه یادداشت ها مطابقت دارد و می تواند چیزی شبیه آنچه در این شکل می بینید باشد

ببینید چگونه دوست دارم ابتدا CTRL-C را ابتدا با کپی کردن نظرات در سر حلقه شروع کرده و سپس با دستوراتی که این کارها را انجام می دهد ، جاهای خالی را پر کنید.

این در واقع OK را کامپایل می کند همانطور که در پایین صفحه در شکل مشاهده می کنید. این از مرحله CDIO D به I می رسد ، و با توسعه کد ایده خوبی است که به دور این حلقه D-I ادامه دهید.

اکنون وقت آن است که به مرحله بعدی برویم ، در آنجا نظری وجود دارد که می گوید: // چیزی را از سخت افزار USB دریافت می کنیم ، سپس آن را به کانال سریال نرم افزار منتقل می کنیم. ما این کد را می نویسیم تا این اتفاق بیفتد - خطوط 133 تا 138 در اینجا با هایلایتر زرد نشان داده شده است

مرحله 8: مفهوم و طراحی - قسمت 2

مفهوم و طراحی - قسمت 2
مفهوم و طراحی - قسمت 2
مفهوم و طراحی - قسمت 2
مفهوم و طراحی - قسمت 2

دو عملکرد اول که در اینجا معرفی می کنیم (recv () و tran () برای دریافت دریافت از پورت سخت افزار و انتقال به پورت نرم افزار است - بنابراین آنها را با پارامترهای 'hw' یا 'sw' نشان داده می شود.

علاوه بر آنها ، ما یک آزمایش روی متغیر جهانی به نام newData اضافه کرده ایم. این یک پرچم است که در داخل تابع "void recv ()؛" قرار می دهیم. وقتی پیامی دریافت شد ، این متغیر از false به true علامت گذاری می شود. ما این کار را به گونه ای انجام می دهیم که پیامی را فقط در صورت دریافت پیام (flag == true) در خط 134 منتقل می کنیم. و هنگامی که پیام خود را ارسال کردیم "کار تمام شده است" ، بنابراین پرچم را مجدداً در خط 137 به false پاک می کنیم.

دوباره می توانیم کامپایل (D تا I) را بررسی کنیم ، و این بار یک پیام خطای "اعلام نشده" داریم (نشان داده شده). این به ما می گوید ما recv () را اعلام نکرده ایم. عملکرد. ما قصد داریم این کار را بعداً انجام دهیم ، بنابراین فعلاً برای اینکه بتوانیم یک کامپایل تمیز بدست آوریم ، باید یک تابع ساختگی یا متغیر ایجاد کنیم ، همانطور که در زیر نشان داده شده است.

دوباره می توانیم کامپایل (D تا I) را بررسی کنیم ، و این بار یک پیام خطای دیگر "اعلام نشده" برای tran () داریم. عملکرد. این نیاز به ایجاد یک مقاله خرد دارد. دوباره می توانیم کامپایل (D تا I) را بررسی کنیم ، و این بار خواهیم دید که این کاملاً کار می کند. تا کنون خیلی خوب.

مرحله 9: حلقه اصلی را به پایان برسانید: الف) دریافت از USB ، ب) دریافت از Slave Arduino

حلقه اصلی را به پایان برسانید: الف) دریافت از USB ، ب) دریافت از Slave Arduino
حلقه اصلی را به پایان برسانید: الف) دریافت از USB ، ب) دریافت از Slave Arduino
حلقه اصلی را به پایان برسانید: الف) دریافت از USB ، ب) دریافت از Slave Arduino
حلقه اصلی را به پایان برسانید: الف) دریافت از USB ، ب) دریافت از Slave Arduino

یک قطعه نهایی که برای خاتمه این قسمت اضافه کرده ایم اضافه کردن کد اشکال زدایی است.

دستورالعمل دیگری در مورد اشکال زدایی طرح ها وجود دارد که ممکن است برای درک آنچه ما در اینجا و چرا انجام داده ایم به آن اشاره شود. به دستورالعمل "نحوه ساخت و آزمایش طرح های آردوینو تا زمان کار آنها" مراجعه کنید

بنابراین این خطوط اشکال زدایی [136-139 نشان داده شده] بعداً در حلقه اصلی اضافه می شوند و ، در اینجا ، می توانید آنها را در Master end با درست ساختن متغیر اشکال زدایی و کامپایل (I) آزمایش کنید ، سپس اگر می توانید یک آردوینو را متصل کنید ، می توانید بارگذاری کنید ، مانیتور سریال را باز کنید و ببینید آیا آنچه که به مانیتور سریال باز می گردد مطابق شکل زیر است (آیا می بینید پیام "DEBUG MODE" اضافه شده است؟)

مرحله 10: دریافت و مدیریت داده ها در Slave Arduino

دریافت و مدیریت داده ها در Slave Arduino
دریافت و مدیریت داده ها در Slave Arduino
دریافت و مدیریت داده ها در Slave Arduino
دریافت و مدیریت داده ها در Slave Arduino

دریافت از Slave Arduino

کد لازم را برای کانال دوم به حلقه اصلی اضافه کنید ، گیرنده سریال نرم افزار همانطور که در تصویر نشان داده شده است - خطوط 149 تا 155.

آیا می بینید که ساختار بر اساس آنچه که در بالا برای مورد اصلی نوشتیم است؟

همچنین خواهید دید که خطای کامپایلر ، یک تابع اعلام نشده دیگر دریافت می کنیم - این بار parseData ()؛ - بنابراین قبل از اینکه بتوانیم یک کامپایل آزمایشی بدون خطا را اجرا کنیم ، لازم است برای این مورد نیز مقاله خرد کنیم.

مدیریت داده ها در Slave Arduino

اگر آردوینو به عنوان یک دستگاه Slave پیکربندی شده است ، کد حلقه اصلی مورد نیاز را اضافه کنید - خطوط 163 تا 174. آیا می بینید که ساختار آن بسیار شبیه به کانال اول است؟

و باید این بار پیدا کنید که کاملاً کامپایل می شود.

مرحله 11: تابع Receive را بنویسید

تابع دریافت را بنویسید
تابع دریافت را بنویسید

تابع دریافت - void recv (char from) {} - دارای دو کار اصلی است.

1 برای دریافت رشته ای از کاراکترها از کانال USB ، و

2 برای دریافت یکی از کانال آردوینو به آردوینو.

برای اولین مورد ما باید استفاده کنیم زیرا از UART سخت افزاری Arduino ساخته شده است ، و برای دوم از کتابخانه استاندارد Arduino: نرم افزار UART.

هنگامی که ما شروع به افزودن کد به یک تابع می کنیم - برای ایجاد یک تابع که کاری را انجام می دهد ، به جای یک مقاله خرد - ما باید به یاد داشته باشیم که مقاله خردی را که جایگزین می کند حذف یا اظهار نظر کنیم. در غیر این صورت با خطای کامپایل مواجه می شویم: ارجاع 'void lrec (char)'.

سعی کنید خطا را دریافت کنید ، و سپس یکی از راه های پیشنهاد شده در بالا را برای خلاص شدن از آن امتحان کنید.

با یک تابع شروع کنید که شبیه عملکردی است که در اینجا خطوط 75 تا 88 را با رنگ زرد نشان می دهیم.

در حال حاضر می دانید که با داشتن کد باید عملیات کامپایل را امتحان کنید. خطایی مانند آنچه قبلاً داشتیم برای شما ایجاد می شود: نام تابع در این محدوده اعلام نشده است. در ابتدا به یک مقاله خرد دیگر احتیاج داریم تا بتوانیم این خطا را کامپایل کنیم ، بنابراین مانند قبل یکی را اضافه کنید و مطمئن شوید که اکنون می توانید کامپایل را بدون خطا دریافت کنید.

حالا اجازه دهید نگاهی به کدی که برای تابع recv () نوشته ایم بیندازیم.

کاملاً تمیز است ، می توانید از شرط "اگر" برای تولید دو قسمت از تابع ذکر شده در بالا استفاده کنید.

کد داخل قسمت "sw" و قسمت "hw" به یک شکل است ، و من آن را در اینجا شرح خواهم داد.

اولین جفت خط در هر مورد ، شروع یک حلقه while است. اگر با زمان آشنایی ندارید ، می توانید آن را در سایت Arduino.cc/Reference برای توضیحات و مثالها جستجو کنید. در اینجا منتظر می مانیم تا تابع "Serial" داخلی هیچ کاراکتری دریافت نکند و چون متغیر newData خاموش شده است (یعنی شرط false newData == درست است). به محض دریافت یک کاراکتر - یا بیش از یک شخصیت - ، در حالی که به خط دوم این جفت می افتد. سپس recAstringChar (char) را فراخوانی می کند. عملکرد برای مدیریت کاراکتر فعلی این جفت خط در حالی متناوب می شود که (یا برای مدتی) هر کاراکتری که هنوز نیاز به دریافت دارد وجود داشته باشد. پس از اتمام همه آنها حالت while به پایان می رسد ، اجازه می دهد تا سطح بعدی یا دیگر به پایان برسد ، و به نوبه خود اجازه می دهد تا rec (char) ؛ عملکرد به پایان برسد بنابراین یک پیام کامل اکنون دریافت شده است.

مرحله 12: فرعی Receive را بنویسید - قسمت 1

تابع دریافت را بنویسید - قسمت 1
تابع دریافت را بنویسید - قسمت 1
تابع دریافت را بنویسید - قسمت 1
تابع دریافت را بنویسید - قسمت 1

اکنون باید تابع را بنام recAstringChar (char) بنویسیم. به از نظر خط 50 در بالا مشاهده می کنید که وظیفه آن به روز رسانی دو بافر با کپی از پیام سریال ورودی است. [معلوم شد در حالی که من سعی می کردم همه اینها را کار کنم ، چیزی که من آموختم این بود که به دو بافر مختلف نیاز داشتم یا حداقل این ساده ترین راه برای حل برخی مشکلات بود ، بنابراین به نوعی نیاز به 2 بافر تبدیل شد ، بنابراین من فقط آنها را ساختم.] من به یکی از بافرها تماس گرفتم: receData و دیگری:

بافرها متغیرهای جهانی هستند ، بنابراین در سطح ماژول اعلام می شوند ، خطوط 9 و 10 برگه مشترک را ببینید. متغیرهای دیگری نیز در داخل این تابع اعلام شده اند که بنابراین محدوده محلی دارند- در خطوط 51-54 در اینجا نشان داده شده است. این مکان برای توضیح تفاوت بین مردم جهانی و محلی نیست ، اما اطلاعات بیشتر در این مورد در https://www.arduino.cc/glossary/fa/ محلی و جهانی وجود دارد.

همچنین می توانید در مورد انواع داده ها و اصلاح کننده های نوع: static، boolean، byte، const، char در https://www.arduino.cc/reference/en/#variables ، که در اینجا نشان داده شده است ، همه چیز را بیاموزید.

جریان اصلی برنامه در این تابع توسط if در خط 56 در اینجا و دیگری مربوطه در خط 74 کنترل می شود. این به دو سناریو می پردازد

الف) [از خط 74 به بعد] هنگامی که پیام دریافتی شروع می شود. این اتفاق می افتد هنگامی که startMarker مشخص می شود - این به عنوان "<" تعریف شده است ، به همین دلیل است که هر زمان که طرح را آزمایش می کنیم ، همیشه رشته خود را با آن کاراکتر شروع می کنیم. اگر این کار را انجام ندهیم ، هیچ چیز به عنوان دریافتی پردازش نمی شود ، همه چیز نادیده گرفته می شود درست مانند اینکه ما در فرمان صفحه کلید "Serial Monitor" تایپ می کنیم.

ب) [سطرهای 56 تا 73] که سایر نویسه ها را دریافت می کند ، هرچه باشند ، اما آنها فقط پس از شروع معتبر (a '>' مانند الف بالا دریافت شده است) با کاراکترها سروکار دارند.)

در این سطرها (از 74 تا 78) ما مقدار دریافت شده <را در یکی از بافرها (receData [0]) قرار می دهیم اما در یکی دیگر. ما با استفاده از دستور post-increment (++) در خط ndx ++ ، اشاره گر بافر (متغیر: char ndx) را تنظیم می کنیم تا به موقعیت بافر اضافی بعدی (receData [1]) اشاره کند. ، و پرچم در حال پیشرفت را روی true قرار می دهیم.

جریان برنامه در این قسمت از تابع توسط if در خط 57 در اینجا و دیگری مربوطه در خط 65 کنترل می شود. این به دو سناریو می پردازد

الف) [از خط 65 به بعد] هنگامی که پیام دریافتی به پایان رسید. این اتفاق می افتد زمانی که endMarker مشخص می شود - به عنوان> تعریف شده است ، به همین دلیل است که هر زمان که طرح خود را آزمایش می کنیم ، همیشه رشته خود را با آن کاراکتر خاتمه می دهیم. یکی از مواردی که هنگام دریافت کاراکتر نهایی اتفاق می افتد این است که پرچم جهانی (از نظر فنی متغیر) newData درست در پایان عملکرد درست تنظیم شده است ، به طوری که تابع زیر تابع ما را فراخوانی می کند (تابع فراخوانی: recv (char) ؛) می تواند "بداند" که داده های جدید معتبر به طور کامل دریافت شده است.

ب) [سطرهای 57 تا 64] که سایر کاراکترها را ، هرچه که هستند دریافت می کند. فقط با شلوغی آنها را به صورت ردیفی در هر دو بافر پارک می کند.

مرحله 13: تابع دریافت را بنویسید - قسمت 2

تابع دریافت را بنویسید - قسمت 2
تابع دریافت را بنویسید - قسمت 2
تابع دریافت را بنویسید - قسمت 2
تابع دریافت را بنویسید - قسمت 2

ممکن است مثالی از ظاهر 2 بافر هنگام پر شدن کمک کند. اگر بخواهیم enter را کلید بزنیم ، در بافرها نویسه ها نشان داده می شوند:

بنابراین اکنون می توانید مشاهده کنید که ما یک بافر داریم که دقیقا همان کاراکترهایی است که در ابتدا تایپ کردیم ، و یک بافر که فقط دو مقدار و یک کاما جداکننده دارد. اکنون ما تعدادی کد داریم که می تواند کاراکترهایی را که در صفحه کلید Serial Monitor تایپ می کنیم دریافت کند ، می توانیم از مرحله I CDIO به O برویم ، برخی از رشته ها را تایپ کرده و ببینیم چه اتفاقی می افتد. کد را در Master Arduino بارگذاری کنید ، Serial Monitor را باز کنید و سعی کنید چیزی معتبر مانند enter وارد کنید. آیا در صفحه نمایش مانیتور Serial مانند صفحه نمایش داده شده در اینجا اکو دریافت می کنید؟

مرحله 14: توابع انتقال و تجزیه را بنویسید

توابع انتقال و تجزیه را بنویسید
توابع انتقال و تجزیه را بنویسید
توابع انتقال و تجزیه را بنویسید
توابع انتقال و تجزیه را بنویسید

ابتدا برای انتقال

بنابراین در حال حاضر یک رشته دریافت کرده ایم ، می توانیم تابع انتقال را بنویسیم: tran (char)؛ برای خرد کردن آن این به ما امکان می دهد یک رشته را از Master به Slave Arduino ارسال کنیم ،

بنابراین مطمئن شوید که هر دو دستگاه به هم متصل شده و به هم متصل شده اند تا این قابلیت جدید را آزمایش کنید.

این عملکرد را همانطور که در خطوط 117 تا 133 در اینجا نشان داده شده است وارد کنید. همانطور که تشخیص داده اید ، دارای دو قسمت است ، یکی برای انتقال به کانال USB (سخت افزار UART) و دیگری برای انتقال به دیگر Arduino (نرم افزار UART.) این باید خطا را کامپایل کند رایگان ، و می توانید فوراً طرح را بارگذاری کنید و ببینید چه اتفاقی می افتد. اینبار می فرستم. آیا نتیجه نشان داده شده را دریافت می کنید؟

تصویر روی صفحه نمایش جالب است زیرا رشته Received… باید مانند قبل صحیح به نظر برسد و رشته Transmission… باید صحیح به نظر برسد. اما توجه داشته باشید که تبدیل عدد صحیح کار نکرده است. هنوز کمی کد دیگر برای اضافه کردن آن وجود دارد.

مرحله 15: توابع انتقال و تجزیه را بنویسید

توابع انتقال و تجزیه را بنویسید
توابع انتقال و تجزیه را بنویسید
توابع انتقال و تجزیه را بنویسید
توابع انتقال و تجزیه را بنویسید

سپس برای Parse

این یک قطعه کد است که رشته دریافت شده را برای بیرون آوردن رشته های جزئی عددی تجزیه کرده و آنها را به مقادیر صحیح تبدیل می کند. این parseData () void است؛ عملکرد حلقه اصلی

کد تجزیه را با کد نشان داده شده در خطوط 98 - 113 جایگزین کنید. آن را بارگذاری کنید ، و بیایید ببینیم مشکلی که با 2 عدد صحیح داشتیم اکنون برطرف شده است. بیایید سعی کنیم.

بله ، کار می کند ، همانطور که نشان داده شده است ، اعداد صحیح یافت شده 49 و 98 هستند.

مرحله 16: نهایی

فینال!
فینال!

این داده ها مستقیماً از طریق کامپیوتر از طریق Master از طریق slave به حلقه رفته و دوباره از طریق Master دوباره به رایانه برمی گردند. با بارگذاری نسخه نهایی رایج در دو حالت Master و slave و با خاموش بودن حالت اشکال زدایی اکنون ، می بینیم که داده ها به درستی در دو طرف دریافت شده اند ، همانطور که در اینجا نشان داده شده است.

توصیه شده: