در قسمت های قبلی آموزش ارتباط سریال UART انواع توابع و دستورات مهم آردوینو را بررسی کردیم. در این پست قصد داریم به ادامهی آموزش توابع پروتوکل سریال در Arduino بپردازیم. شناخت این توابع و اطلاع از روش کارکرد آنها در نرم افزار و سخت افزار، بسیار حائز اهمیت است. این توابع در کلیه بردهای آردوینو کاربردی هستند. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
parseInt()
به کمک این تابع میتوان فقط اعداد را از پورت سریاال دریافت گرد . به طور کلی این تابع در بافر سریال جست و جو کرده و فقط اعداد را نمایش میدهد و در صورت وجود کاراکتر ، از خواندن آن کاراکتر صرف نظر میکند.البته قابل ذکر است این تابع اعداد منفی که با نشانه “-” میباشند را تشخیص میدهد. ساختار این تابع به صورت زیر میباشد :
Serial.parseInt();
به مثال زیر توجه کنید:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { Serial.println( Serial.parseInt() ); } } /*فرض کنید عبارت * digispark12345digispark123456 * را به پورت سریال ارسال کردیم * * * *آن گاه عبارتی مانند زیر نمایش داده می شود * * *۱۲۳۴۵ *۱۲۳۴۵ * * * * */
در مثال فوق اگر ترکیب عدد و کاراکتر وارد کنیم ، فقط اعداد بر روی سریال مانیتور نمایش داده میشود.
parseFloat()
این تابع عملکری همانند تابع parseInt دارد با این تفاوت که علاوه بر تشخیص اعداد صحیح ، قابلیت تشخیص اعداد اعشاری را نیز دارا میباشد. نکته : اعدای مانند ۸۰ ، ۱۰ ، ۱۶۸ ، ۲۳- و…. نیز به عنوان اعداد اعشاری شناخته میشوند و parseFloat آن ها را تشخیص میدهد. ساختار این تابع همانند قطعه کد زیر میباشد:
Serial.parseFloat();
مثال:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { Serial.println( Serial.parseFloat() ); } }
readString()
توسط این تابع تمام دیتای موجود د بافر گیرنده سریال به صورت یک جا خوانده میشود و پس از آن ، بافر پاک سازی میشود.ساختار تابع به صورت زیر میباشد:
Serial.readString();
مثال:
String text=""; void setup() { Serial.begin(9600); Serial.setTimeout(1); } void loop() { if (Serial.available() > 0) { text=Serial.readString(); Serial.println(text); Serial.flush(); } }
readStringUntil()
این تابع عملکردی بسیار مشابه به تابع readString دارد با این تفاوت که شروع به خواندن کل سریاال بافر میکند و هنگامی که به کاراکتر مورد نظر ما رسید ، عملیات را متوقف میکند و تا دیتای موجود تا قبل از کاراکتر مورد نظر ما را از بافر گیرنده پاک میکند. ساختار کلی تابع به صورت زیر میباشد:
Serial.readStringUntil(terminator);
terminator : کاراکتر مورد نظر ما جهت توقف خواندن بافر سیال میباشد.توجه داشته باشید که terminator فقط میتواند از جنس char باشد. مثال:
String text=""; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { text=Serial.readStringUntil('a'); Serial.println(text); Serial.flush(); } }
در مثال فوق ، برنامه شروع به خواندن بافر پورت سریال میکند و هنگامی که به کاراکتر a رسید ، خواندن را متوقف کرده و اطلاعات را بر روی سریال مانیتور نمایش میدهد. در قسمتهای بعدی نیز به ادامه آموزش ارتباط سریال آردوینو میپردازیم.
چنانچه مطالب این آموزش را گنک یافتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در مطالب درج شده وجود دارد میتوانید از همین طریق اطلاع رسانی کنید.
خیلی عالی بود
اما مطالب سنگین است لطفا بیشتر توضیح دهید
با تشکر
درود
هرجایی را که متوجه نشدید سوال بفرمایید
اقا اگه همه آموزشا رو تو یک پست میگفتین به نظرمم بهتر بود
اما بازم به هر حال خیلی ممنون
همچین آموزشایی اصلا به زبان فارسی نیست
اتفاقا به نظر من اینطوری بهتره
اونطوری خیلی زیاد میشد و فهمشم سخت میشد
سلام، خیلی ممنون از آموزشهای خوبتون.
یه سوال داشتم. من وقتی کدم رو آپلود میکنم و سریال مانیتورم رو باز میکنم، به جای داده بهم یه خط بینهایت از مربع و علامت سوال میده. میدونید دلیلش چیه؟
با سلام و تشکر از شما
این مورد دلایل مختلفی دارد، یکی از آنها عدم تنظیم صحیح بادریت است. این مورد را بررسی کنید. بادریت تعریف شده در کدها بایستی با بادریت سریال مانیتور یکسان باشد.
سلام. > 0 چی هست؟ داخل همه شرط های if نوشته شده
if (Serial.available() > 0)
منظور عبارت دوم داخل شرط رو لطفا توضیح دهید
چرا وقتی یک عدد چاپ میکنیم عدد ۰ بعد از اون خود به خود چاپ میشه؟