-
شنبه, ۳۰ بهمن ۱۴۰۰، ۰۵:۰۲ ب.ظ
-
۶۱۴
سلام دوستان :)
توی پست امروز قراره با هم ببینیم که پورت های Serial توی Arduino (پورت های 0 و 1 در Arduino UNO) چه کاربردی دارن.
اگر هر مدلی از آردوینو رو داشته باشین احتمالا متوجه شدین که یک سری پورت ها به اسم پورت های سریال وجود دارن و نمیشه از اونا مثل پورت های دیگه استفاده کرد.
همونطور که از اسم این پورت ها مشخصه،این پورت ها برای برقراری ارتباط بین آردوینو و هر دستگاه دیگه ای با استفاده از پروتکل UART هستند.
اما قبل از اینکه ادامه بدیم بهتره که بدونیم پروتکل UART چی هست.
UART مخفف universal asynchronous receiver-transmitter یکی از رایج ترین پروتکل ها برای برقراری ارتباط بین دو تا دستگاه هست و به صورت سری اطلاعات رو انتقال میده که اکثر دستگاه ها هم از این پروتکل استفاده می کنن و آردوینو (در واقع هر میکروکنترلر از نوع AVR) از این پروتکل پشتیبانی می کنه و میشه توی آردوینو استفادش کرد.
داخل آردوینو UNO پین 0 یا RX برای دریافت اطلاعات و پین 1 یا TX برای ارسال اطلاعات هست.
خب حالا اگر بخوایم دو تا آردوینو رو بهم متصل کنیم باید یکی رو به عنوان Master یا ارباب و یکی دیگه رو به عنوان Slave یا برده در نظر بگیریم و هیچ فرقی نداره کدومشونو.
کار Master اینه که یک سری داده رو به سمت Slave ارسال می کنه و Slave هم اونو دریافت می کنه و کار Slave هم دریافت کردن داده ارسال شده از طرف Master هست.(حالا خودش میدونه که به حرف Master گوش کنه یا نه!). پین شماره یک Master رو به پین شماره صفر Slave وصل می کنیم و پین صفر Master رو به پین یک Slave وصل می کنیم. حالا یک LED روی یک بردبورد نصب کنین و مثبتشو بزنین به پین شماره 13 آردوینو.
خب این از مدار؛
برای اینکه بهتر متوجه بشین این هم شکلش:
اگر با شماتیک راحت ترین این هم شماتیک:
خب حالا بریم سراغ برنامش.
حتما شما تا حالا با Serial Monitor کار کردین یعنی مثلا مقدار یک سنسور رو روی Serial Monitor روی نرم افزار Arduino IDE نشون بدین. این کار ما هم شبیه به همینه و از سریال استفاده می کنیم.
اول از همه بریم برنامه مربوط به آردوینو Master رو بنویسیم.
یک فایل برای این برنامه درست کنین و این کد ها رو توش بذارین:
void setup() { Serial.begin(9600); } void loop() { Serial.write('1'); delay(500); Serial.write('0'); delay(500); }
توضیح: توی بخش setup اول ارتباط سریال رو با baud rate 9600 شروع کردیم. توی بخش loop از تابع write استفاده کردیم که با استفاده از پورت سریال، داده ای که میخوایم رو انتقال بده. اینجا هر نیم ثانیه به ترتیب عدد 0 و 1 رو برای Slave ارسال کردیم که این به Slave میگه کی LED خاموش بشه و کی روشن.
حالا بریم سراغ برنامه مربوط به آردوینو Slave.
یک فایل برای این برنامه درست کنین و این کد ها رو توش بذارین:
char c = ' '; void setup() { pinMode(13, OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()) { c = Serial.read(); if(c == '0'){ digitalWrite(13, LOW); } else if(c == '1') { digitalWrite(13, HIGH); } } }
توضیح: اول از همه یک متغییر از نوع char تعریف کردیم که داده ای که Master برای ما می فرسته رو داخلش ذخیره کنیم و بر اساس اون LED رو روشن یا خاموش کنیم. بعد توی بخش ستاپ pinMode مربوط به LED رو تعریف کردیم و ارتباط سریال رو با baud rate 9600 شروع کردیم. بعد از اینکه ارتباط سریال آغاز شد اول از همه توی if چک می کنیم که ارتباطمون برقرار باشه. اگر ارتباطمون برقرار بود داده ای که Master فرستاده رو داخل متغییر c ذخیره می کنیم. توی if بعدی هم چک می کنیم ببینیم که داده ارسال شده 0 هست یا 1. اگر 0 بود LED رو خاموش می کنه و اگر 1 بود LED رو روشن می کنه.
خب کارمون تموم شد!
فقط قبل از اینکه برین دقت کنین که قبل از آپلود برنامه به هر آردوینو پین 0 و 1 اون رو جدا کنین و بعد دوباره بزنین چون اگر متصل باشه آپلود نمیکنه.
توی این فیلم هم میتونین عملکرد مدار رو ببینین:
امیدوارم براتون مفید بوده باشه D: