آموزش ارتباط سریال آردوینو بخش چهارم

آموزش ارتباط سریال Arduino

به نام خدا . با سلام

در جلسه چهارم از آموزش ارتباط سریال در آردوینو قصد داریم به توضیح توابع find  , peek  ,flush  بپردازیم . با تخصصی ترین مرکز آموزش arduino، دیجی اسپارک همراه باشید.

 

find()

 

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

عمل کرد تابع این گونه می‌باشد که به جای target یک رشته به تابع می‌دهیم ، برنامه شروع به خواندن بافر سریال میکند و در بافر عبارت مورد نظر را جست و جو می‌کند و در صورت پیدا کردن عبارت مورد نظر ، مقدار true را برمی‌گرداند.

مثال:

 

 

peek()

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

به مثال زیر توجه کنید

 

برای انجام مثال فوق ابتدا یک کاراکتر توسط سریال مانیتور نرم افزار بر روی پورت سریال ارسال میکنیم . در خط شماره ۱۰ ، دیتا توسط تابع read خوانده و سپس از بافر سریال حذف می‌شود . بعد از آن نوبت به عملیات خط شماره ۱۱ می‌رسد  ،در بافر دیتایی وجود ندارد پس تابع read که در خط شماره ۱۱ به کار برده شده است  مقدار -۱ را برمی‌گرداند(همانطور که در آموزش های قبلی ارتباط سریال آردوینو گفته شد ، در صورتی که تابع read ، دیتایی دریافت نکند ، مقدار منفی ۱ را برمی‌گرداند)

 

حال مثال را با استفاده از تابع peek بیان می‌کنیم :

 

در این مثال نیز یک  کاراکتر توسط سریال مانیتور نرم افزار به پورت سریال ارسال می‌کنیم. در خط شماره ۱۰ دیتا توسط تابع peek خوانده می‌شود ولی برخلاف مثال قبل این بار دیتا از بافر سریال حذف نمی‌شود . پس از آن نوبت به خط شماره ۱۱ می‌رسد . این بار به این علت که قبل از آن از تابع peek استفاده شده است و دیتا از بافر پاک نشده ، دیتا را خوانده و بر روی سریال مانیتور نرم افزار نمایش می‌دهد.

flush()

در کتابخانه سریال نرم افزار آردینو  تابعی به نام flush قرار دارد که کمی کاربران را در استفاده از آن گمراه می‌کند و در تمام آموزش ها هم (حداقل آموزش های زبان فارسی) این تابع را به صورت کاملا اشتباه توضیح داده اند. و این آموزش تنها آموزشی است که به تشریح درست این تابع میپردازد. در ورژن‌های ۱٫۰ به قبل نرم افزار آردوینو ، این تابع وظیقه‌ی پاک کردن بافرگیرنده سریال را داشت. یعنی هرگاه از این تابع استفاده میشد تمام اطلاعات بافر گیرنده به طور کامل حذف میشد.

ولی بعد از ورژن ۱٫۰ نرم افزار آردوینو  ، ماهیت این تابع کاملا تغییر یافت. در حال حاضر هنگامی که از این تابع استفاده می‌شود ، برنامه متوقف شده تا تمام دیتا را از بافر فرستنده ارسال کند. توجه کنید گفته شد اطلاعات را ارسال کند نه دریافت.

برای درک بهتر این تابع دو مثال بیان میکنیم   و زمان ارسال کامل اطلاعات در هنگام استفاده از این تابع و عدم استفاده از این تابع را به کمک تابع millis  محاسبه می‌کنیم

مثال اول قطعه کدی است که در آن از تابع flush استفاده نشده است  و قصد داریم یک سری اطلاعات را به سریال مانیتور ارسال کنیم و زمان ارسال آن را اندازه گیری نماییم :

پس از کامپایل این کد ، مشاهده می‌کنید که اطلاعات در زمان حدود ۲۰ میلی ثانیه ارسال شده‌اند.

 

مثال دوم  قطعه کدی است که در آن از تابع flush استفاده شده است و قصد داریم یک سری اطلاعات را به سریال مانیتور ارسال کنیم و زمان ارسال آن را اندازه گیری نماییم :

پس از کامپایل کد مشاهده می‌کنید که زمان ارسال اطلاعات به حدود ۸۰ میلی ثانیه رسیده است.یعنی حدود ۴ برابر بیشتر از زمانی شده است که از تابع flush استفاده نشده بود.

پس همانطور که از مثال ها پیداست تابع flush باعث مکث در برنامه می‌شود و زمانی که قصد داریم که ابتدا اطلاعات به طور کامل ارسال شود و بعد از آن برنامه را ادامه دهیم باید از این تابع استفاده کرد

این قسمت از آموزش را به پایان می‌رسانیم  و در قسمت بعد مبحث ارتباط سریال آردوینو را تکمیل می‌کنیم.

 

 

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

2 دیدگاه ها

  1. علی نصر می‌گه:

    انصافا تابع flush رو عالی توضیح دادین

    من خیلی وقت بود میخواسم بدونم کارش چیه ولی نه خود سایت آردوینو نه سایتای دیگه هیچکدوم این چیزا را دربارش نگفتن

    خیلی مرسی

  2. مهدی می‌گه:

    درود
    امانش هست پروتکل spi را هم تدریس کنید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *