آموزش آردوینو

آموزش افزایش پورت سریال UART در بردهای آردوینو – بخش دوم

آموزش افزایش پورت سریال در آردوینو
نوشته شده توسط علیرضا قربانی

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

 

()isListening

در صورتی که پورت سریال ساخته شده آماده برای دریافت اطلاعات باشه، این تابع مقدار true و در غیر این صورت مقدار false را برمی‌گرداند.

#include <SoftwareSerial.h>

// TX = digital pin 10, RX = digital pin 11
SoftwareSerial portOne(10, 11);

void setup()
{
  // Start the hardware serial port
  Serial.begin(9600);

  // Start software serial port
  portOne.begin(9600);
}

void loop()
{
  if (portOne.isListening())
  {
    Serial.println("Port One is listening!");
  }
}

 

 

()peek

این تابع دیتایی که بر روی پورت سریال ساخته شده را می‌خواند. این تابع برخلاف تابع read پس از خواندن اطلاعات آن‌ها را بافر گیرنده سریال حذف نمی‌کند.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11);

void setup()
{
  mySerial.begin(9600);
}

void loop()
{
  char c = mySerial.peek();
}

 

 

()overflow

این تابع اگر بافر گیرنده سریال پر شود ، مقدار True را برمی‌گرداند.بافر گیرنده سریال کتابخانه SoftwareSerial تا ۶۴ بایت را می‌تواند در خود نگه دارد. مثال:

#include <SoftwareSerial.h>

// software serial : TX = digital pin 10, RX = digital pin 11
SoftwareSerial portOne(10, 11);

void setup()
{
  Serial.begin(9600);
  portOne.begin(9600);
}

void loop()
{
  if (portOne.overflow())
  {
    Serial.println("SoftwareSerial overflow!");
  }

}

 

(print(data

این تابع دیتا را به پورت سریال ارسال می‌کند.تابع print دارای فرم های مختلفی می‌باشد.این تابع اعداد صحیح  ، متن ، کاراکتر را به صورت رشته اعداد اعشاری را به صورت رشته  با دو عدد اعشار ارسال می‌کند.به مثال زیر توجه کنید:

myserial.print( 78 );// gives "78"
myserial.print(1.23456);// gives "1.23"
myserial.print('N');// gives "N"
myserial.print("Hello world.");// gives "Hello world."

 

این تابع دارای دو ساختار به صورت زیر می‌باشد:

myserial.print( val);
myserial.print( val, format);

 

val : دیتایی می باشد که می‌خواهیم آن را به پروت سریال ارسال کنیم

format : فرمت نمایش و تعداد ممیز اعشار نمایش داده را مشخص می‌کند.

برای ارسال اطلاعات به فرمت باینری ( مبنای ۲ )  از BIN ، مبنای ۸ از OCT ، مبنای ۱۰ از DEC و مبنای ۱۶ از HEX  استفاده می‌کنیم. توجه شما را به مثال زیر جلب می‌کنم :

myserial.print(78, BIN); // gives "1001110"       مبنای ۲
myserial.print(78, OCT); // gives "116"           مبنای ۸
myserial.print(78, DEC); // gives "78"            مبنای ۱۰
myserial.print(78, HEX); // gives "4E"            مبنای ۱۶

 

همچنین می‌توان تعداد ممیز اعشار را توسط format تعیین نمود.برای این کار کافی است تنها تعداد اعشار مورد نیاز را به جای format قرار دهیم همانند مثال زیر:

myserial.print(1.23456, 0); // gives "1"
myserial.print(1.23456, 2); // gives "1.23"
myserial.print(1.23456, 4); // gives "1.2346"

 

(println(data

 

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

,myserial.print("");
  myserial.print('n');

 

myserial.priantln("");

 

(write(data

به وسیله این تابع می‌توان یک عدد بین ۰ تا ۲۵۵ ، یک رشته و یا یک آرایه (همراه با تعیین طولی از آرایه که قصد ارسال آن را دریم)ارسال کرد.این تابع تعداد کراراکتر‌های فرستاده شده در هر مرحله را نیز میخص مس‌کند. تفاوت این تابع با تابع print در جیست؟ تابع print  دیتا را به صورت کاراکتر ASCII ارسال می‌کند که باعث می‌شود دیتای ارسالی برای کاربر قابل خواندن و درگ باشد . ولی در مقایل تابع write اطلاعات را به صورت بایتو ناخوانا ارسال می‌کند. علت استفاده از تابع writeدر این است که بعضی از دستگاه‌ها دیتا را با فرمت بایت می‌خوانند.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

void setup()
{
  mySerial.begin(9600);
}

void loop()
{
  mySerial.write(45); // send a byte with the value 45

   int bytesSent = mySerial.write(“hello”); //send the string “hello” and return the length of the string.
}

 

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

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۱ دیدگاه