استفاده از پورت های سریال در آردوینو

Ratings
(1)

آردوینو به ما امکان می دهد تا اپلیکیشن های مستقل زیادی را ایجاد کنیم(پروژه هایی که شامل هیچ کامپیوتر دیگری نیستند). در چنین مواردی ما نیاز داریم تا آردوینو را یک بار به یک کامپیوتر متصل کنیم تا نرم افزار آپلود شود و پس از آن فقط به یک منبع تغذیه نیاز داریم. بیشتر اوقات، مردم از آردوینو برای بهبود بخشیدن به قابلیت های یک کامپیوتر با استفاده از سنسورها، یعنی  با دادن دسترسی به سخت افزارهای بیشتر استفاده می کنند. معمولا ما سخت افزارهای خارجی را از طریق پورت سریال کنترل می کنیم، بنابراین این ایده ی خوبی است که یاد بگیریم که چگونه به صورت سریال با آردوینو ارتباط برقرار کنیم. با اینکه استاندارد های ارتباط سریال در طول سال های گذشته تغییر کرده اند، اما اصول پایه ی کار همواره یکسان باقی می مانند. در ساده ترین حالت، ما می توانیم دو دستگاه را تنها با استفاده از سه سیم به یکدیگر متصل کنیم: یک سیم زمین مشترک(ground)، یک سیم برای انتقال داده(TX)، و یک سیم برای دریافت داده(RX).

 

 ارتباط سریال ممکن است قدیمی به نظر برسد اما هنوز بعنوان یک راه خوب برای ارتباط دستگاه های سخت افزاری ترجیح داده می شود. حرف S در USB به کلمه ی serial اشاره دارد. برای آپلود کردن نرم افزار، آردوینو یک پورت سریال دارد و ما می توانیم برای متصل کردن آردوینو به دیگر دستگاه ها نیز از آن استفاده کنیم. در مقاله ی کامپایل و آپلود برنامه ها، یاد گرفتیم که چگونه پورت سریالی که آردوینو به آن متصل شده است را پیدا کنیم. در این بخش، ما از این پورت سریال برای کنترل کردن ال ای دی status آردوینو با استفاده از کیبورد کامپیوتر استفاده می کنیم. وقتی ما دکمه ی 1 را فشار می دهیم این ال ای دی باید روشن شود و وقتی دکمه ی 2 را فشار می دهیم باید خاموش شود. تمام کدهایی که نیاز داریم به صورت زیر است:

const unsigned int LED_PIN = 13;
const unsigned int BAUD_RATE = 9600;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(BAUD_RATE); 
}

void loop() {
  if (Serial.available() > 0) { 
    int command = Serial.read();
    if (command == '1') {
      digitalWrite(LED_PIN, HIGH);
      Serial.println("LED on");
    } else if (command == '2') {
      digitalWrite(LED_PIN, LOW);
      Serial.println("LED off");
    } else {
      Serial.print("Unknown command: ");
      Serial.println(command); 
    }
  }
}

 مانند مثال قبل، ما یک ثابت برای پین که ال ای دی به آن وصل است تعریف کردیم و در تابع setup آن را به حالت OUTPUT تنظیم کردیم. در خط 6، ما با استفاده از تابع begin از کلاس Serial، پورت سریال را مقدار دهی اولیه(initialize) کردیم و نرخ انتقال(baud rate) را به 9600 تنظیم کردیم. شما می توانید در مقاله ی "یادگیری بیشتر در مورد ارتباطات سریال در صفحه 253، در مورد نرخ انتقال(baud rate) چیزهای بیشتری بیاموزید. این تمام چیزی است که برای ارسال و دریافت داده از طریق پورت سریال در برنامه ی خود نیاز داریم. اکنون اجازه دهید داده ها را بخوانیم و تفسیر کنیم.

 با فراخوانی متد available از کلاس Serial در خط 10، تابع loop آغاز به کار می کند. متد available تعداد بایت های در حال انتظار در پورت سریال را برمی گرداند. اگر داده ای در دسترس(available) باشد، ما آن را با استفاده از دستور Serial.read می خوانیم. متد read اگر داده در دسترس(available) باشد، اولین بایت از داده های ورودی را می خوان و در غیر این صورت 1- را (برمی گرداند). اگر بایتی که داریم می خوانیم کاراکتر 1 را مشخص کند، ما LED را روشن می کنیم و پیغام LED on رادر پورت سریال  برمی گردانیم. برای این کار، ما از دستور Serial.println استفاده می کنیم که یک کاراکتر carriage return (یعنی کد اَسکی 13) را اضافه می کند و به دنبال آن یک newline به متن اضافه می شود(کد اَسکی 10). اما اگر ما کاراکتر 2 را دریافت کنیم، ال ای دی را خاموش می کنیم. اگر ما یک فرمان یا command که پشتیبانی نمی شود را دریافت کنیم، یک پیغام ارسال می کنیم که ما این فرمان را متوجه نمی شویم. دستور Serial.print دقیقا مثل دستور Serial.println عمل می کند اما کاراکترهای carriage return و newline  را به پیغام اضافه نمی کند. اجازه دهید ببینیم این برنامه در عمل چگونه کار می کند. برنامه را کامپایل کنید و سپس آن را در آردوینو آپلود کنید و سپس به بخش serial monitor بروید. در نگاه اول، اتفاقی نمی افتد. علتش این است که ما هیچ فرمانی را هنوز به آردوینو اضافه نکرده ایم. مطمئن شوید که منوی کشویی در پایین serial monitor به No line ending تنظیم شده باشد. حالا در تکست باکس مقدار 1 را وارد کنید و سپس بر روی دکمه ی Send کلیک کنید. اکنون دو چیز باید اتفاق بیفتد: ال ای دی روشن می شود و پیغام LED on در پنجره ی serial monitor ظاهر می شود(این موضوع در تصویر زیر نشان داده شده است). اکنون ما داریم  ال ای دی را با استفاده از کیبورد کامپیوتر کنترل می کنیم.

 چند بار اعداد 1 و 2 را وارد کنید و وقتی که فرمان های ناشناخته ارسال می کنید،  مشاهده کنید که چه اتفاقی می افتد. اگر ما یک حرف A بزرگ را تایپ کنیم، آردوینو پیغام Unknown command: 65 را برمی گرداند. عدد 65، کد اسکی حرف A است و آردوینو داده ای که دارد یعنی 65 را در خروجی نشان می دهد. این رفتار پیش فرض متد print از کلاس Serial است و ما می توانیم آن را با پاس دادن یک مشخص کننده ی فرمت(format specifier) در داخل تابع، تغییر دهیم. برای مشاهده ی این تاثیر، خط 20 از کدها را با هریک از دستورات زیر جایگزین کنید:

Serial.println(command, DEC);
Serial.println(command, HEX);
Serial.println(command, OCT);
Serial.println(command, BIN);
Serial.write(command);
Serial.println();

 حالا وقتی که ما دوباره کاراکتر A را ارسال کنیم، خروجی به صورت زیر خواهد بود:

Unknown command: 65
41
101
1000001
A

 بسته به مشخص کننده ی فرمت(format specifier)، دستور Serial.println به طور اتوماتیک یک بایت را به یک نمایش دیگر تبدیل می کند. DEC باعث می شود که در خروجی یک عدد دسیمال نشان داده شود و HEX باعث می شود که یک عدد هگزادسیمال نشان داده شود و همین طور الی آخر. توجه کنید که چنین عملیاتی معمولا طول داده ای که انتقال داده شده است را تغییر می دهد.  نمایش باینری بایت تکی 65 به 7 بایت نیاز دارد زیرا حاوی هفت کاراکتر است. همچنین توجه داشته باشید که ما باید برای نشان دادن مقدار فرمان خود به صورت نمایش کاراکتری، باید به جای Serial.println از Serial.write استفاده کنیم. نسخه های قبلی IDE آردوینو یک اصلاحگر BYTE برای انجام این هدف داشتند اما این ابزار در آردوینو 1.0 حذف شد.

 {module کمک نقدی به نویسنده}

  • بازدید: 3476

دیدگاه‌ها

0
احسان عباسی
3 years ago
Hello. I dont use Twitter.Please follow my Instagram page:
https://www.instagram.com/sina2.ir
Like Like نقل قول کردن
0
Andre
3 years ago
Hey there! Do you use Twitter? I'd like to follow you
if that would be ok. I'm definitely enjoying your blog and look forward to new posts.
Like Like نقل قول کردن

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال