در بخش قبل از مجموعه آموزش پورت سریال بردهای آردوینو، به شرح بعضی از توابع 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 تعداد اربتباط سریال در هر بردر را افزایش دهید.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
[…] آموزش افزایش پورت سریال آردوینو بخش دوم […]
[…] آموزش افزایش پورت سریال آردوینو بخش دوم […]
[…] آموزش افزایش پورت سریال آردوینو بخش دوم […]
برای DUE که ARM است کاربرد داره؟
خیر
خود آردوینو due دارای ۵پورت سریال هست فکر نکنم دیگه نیاز به سریال نرم افزار باشه
ولی ۰و۱و۲و۳ rx,tx چهارتا بیشتر نیست که؟
میشه به arm)due) اضافه کرد؟
چگونه میزان بافر رو که فرمودید ۶۴ تا می باشد افزایش دهیم
سلام خسته نباشید
فرق Serial.begin با mySerial.begin چیست؟ در استفاده چه فرقی دارند؟؟
با سلام
کاربر گرامی منظور از myserial اسم کلاس تابع کتابخانه software serial است و تفاوتی در عملکرد ندارد. اگر بخواهید از این کتابخانه استفاده کنید، بایستی اسم کلاس را مشخص کنید.
سلام آیا ممکن هست روی آردوینو UNO هم تعدادپورت سریال را به کمک این روش افزایش داد و مثلا در پروژه ای که بایذ ۲ ماژول SIM800 وNEO6M را به کار بگیرم استفاده کرد؟
و سوال بعد این که آیا اطلاعات در این روش به درستی ارسال و یا دریافت می شوند و یا چالشی ممکن هست به وجود بیاید؟
با سلام
کاربر گرامی این آموزش برای افزایش پورت سریال است، با دقت مطالعه کنید.