نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
قدس خرمشهر دیگر می شود
مهدی دمیرچیلو

آموزش جامع آردوینو جلسه ۴

168

به نام خدا : سلام خدمت شما دوستان گل ، تو این مطلب از آموزش آردوینو که جلسه ۴ امش هستش ، میخوام به مبحث آموزش ارتباط سریال در آردوینو بپردازم و پروژه آردوینو هم براتون میزارم تا بیشتر و بهتر یاد بگیرید ، مشکلی سوالی چیزی هم بود حتما در نظرات مطرح کنید.

آموزش جامع آردوینو جلسه 4

خوب اگه برید سایت arduino.cc میبینید که تو قسمت ارتباطاتش ۲ تا پروتکل ارتباطی به نام های Serial و Stream وجود داره که تو این مطلب انشاالله میخوام درباره پروتکل Serial (سریال blush) در آردوینو ( آردینو crazy) صحبت کنم و مختون رو بخورم buba

آموزش پروتکل سریال در آردوینو

برا ارتباط آردوینو با کامپیوتر یا با چیزای دیگه (که مثلا از آردوینو به کامپوتر اطلاعات بفرستیم و بلعکس، اطلاعات دریافت کنیم) میایم و از پروتکل سریال استفاده میکنیم.
توابع پروتکل سریال در آردوینو : این پروتکول Serial تابع مابع زیاد داره(۲۰ تا wacko ) ممکنه مطلب یکم طولانی بشه…. laugh …. لذا کمربنداتون رو ببنید و از رو صندلی بلند نشید تا مطلب رو نخوندید rtfm

if(Serial)
available
begin
end
find

findUntil
flush
parseFloat
parseInt
peek

print
println
read
readBytes
readBytesUntil

readString
readStringUntil
setTimeout
write
serialEvent

توجه های مهم و غیر مهم ^_^
توجه ۰ : همه ی برد های آردوینو حداقل یه پایه ارتباط سریال دارن.
توجه ۱(مهم) : RX (این پایه اطلاعات رو دریافت میکنه) و TX (این پایه اطلاعات رو ارسال میکنه) پایه های ارتباط سریال هستن که معمولا پایه های ۰ و ۱ برد های آردینو هستن.
توجه ۲(مهم) : اگه از این پایه های ۰ و ۱ آردینو (TX , RX) به عنوان پایه های ارتباط سریال استفاده کنید دیگه نمیتونید از این پایه ها به عنوان پایه های ورودی خروجی استفاده کنی.......یا باید در نقش ورودی خرودی باشن یا در نقش پایه های ارتباط سریال ، وسلام ..... rtfm
توجه ۳ : برد های آردوینو سری Mega و Due سه تا پایه ارتباط سریال داره(۳ جفت پایه ارتباط سریال داره pardon) .... البته اینو گفتم که گفته باشم ، چیز زیاد مهمی نیست چون ما با برد ARDUINO UNO کار مکنیم. shout

  • Serial1 : پایه ۱۹(RX) و پایه ۱۸(TX)
  • Serial2 : پایه ۱۷(RX) و پایه ۱۶(TX)
  • Serial3 : پایه ۱۵(RX) و پایه ۱۴(TX)

توجه ۴ : برای ارتباط کامپیوتر با آردوینو نیاز به یه مبدل USB TO SERIAL داریم ، ....این مبدل ها یه سرشون USB داره که معلومه که باس به کامپیوتر وصل بشه و یه سرشون ۲ تا پایه TX و RX داره که به پایه های RX و TX برد آردوینو وصل میشه تا عمل تبادل اطلاعات صورت بگیره. (پایه RX کامپیوتر یا همون مبدل به پایه TX آردوینو و پایه TX کامپیوتر به پایه RX آردوینو.....اگه دلیلش رو نفهمیدید بگین تا بگم victory .....ولی ۲۰ ثانیه فکر کنید علتش رو میفهمید. good )

Serial.begin
Serial.begin : این تابع میشه گفت برا تنظیم سرعت انتقال داه هستش که توی آردوینو و اون یکی چیزی که میخوایم باهاش ارتباط برقرار کنیم(مثلا کامپیوتر) باید این سرعت یکسان باشه تا عمل تبادل اطلاعات مثل آدم صورت بگیره smile

speed : سرعت انتقال داده (baud)
config : تعیین تعداد بیت های data و parity و stop
از قیافش معلومه که : خوب همون طور که میبینید تابع Serial.begin رو به دو صورت میشه نوشت که تو تابع اولی فقط سرعت انتقال داده (baud) رو تعیین میکنیم و تو اون یکی علامه بر speed یه چیزی هستش به نام config که اینم باس تنظیم کنیم.
نظر من : بهتره تو شروع کار از همین تابع اولی استفاده کنید ، بعدا که یکم راه افتادید برید و از تابع دومی استفاده کنید.

توجه ۱ : هر بار که یه بسته اطلاعاتی ارسال میشه ، این بسته شامل تعداد ۰ و ۱ هستش که یه سری از اینا اطلاعات ما هستن(data) ، یه سری رو بهشون میگن بیت stop که طرف با دیدن اینا بفهمه که بسته اطلاعاتی ما بیت هاش ارسال شد و این بیت های stop هم نشان از پایان کار اون بسته اطلاعاتی هستش(بهترین حالت گفتنم بود این  cry) و parity (بیت توازن) هم برا اینه که بفهمیم اطلاعات درست تبادل شده ، که توضیحش نمیدم و اگه خواستید میتونید لینک های زیر رو ببینید diablo  :  parity یا بیت توازن چیست ؟ : مطلب۱ ، مطلب۲ ، مطلب۳
توجه ۲ : خوب حالا توسط پارامتر config میایم و تعداد این ۳ مورد رو تعیین میکنیم(که باس این قسمت تو هر دو طرف ، هم آردوینو و هم کامپیوتر مثلا یکسان باشه)
تو تابع دومی config رو تعیین میکنیم ولی تو تابع اولی config یه مقدار پیش فرضی داره و دیگه نیاز به تعیینش نیست.

baud rate(نرخ انتقال داده) : سرعت انتقال اطلاعات در ۱ ثانیه
انواع baud rate موجود : ۳۰۰ , ۶۰۰ , ۱۲۰۰ , ۲۴۰۰ , ۴۸۰۰ , ۹۶۰۰ , ۱۴۴۰۰ , ۱۹۲۰۰ , ۲۸۸۰۰ , ۳۸۴۰۰ , ۵۷۶۰۰ , ۱۱۵۲۰۰
نرخ عرفش ۹۶۰۰ هستش که یعنی تبادل اطلاعات ۹۶۰۰ بیت بر ثانیه
فرق بیت با بایت : هر ۸ تا بیت برابر ۱ بایت هستش ؛ هر بیت یا ۰ هستش یا ۱

مقادیر config : مقادیری که میشه به config انتساب داد به صورت زیر هستش :
N = none ___ E = even ___  O = odd
x الی y یعنی تعداد بیت های دیتا ، مثلا ۵N1 ِیعنی تعداد بیت ها دیتا ۶ تا است.
در کد های زیر N,E,O یعنی نوع parity که N یعنی parity نداریم ، E یعنی parity فرد است و O یعنی parity زوج است.
ولی این که چطور میشه فهمید تعداد بیت های STOP چند تاس (۱ دونه یا ۲ تا) رو من نمیدونم ، اگه کسی میدونه بگه ، آموزشی چیزی تو این باره ندیدم که بخوایم این جا بگم تو سایت خود آردوینو هم چیزی در این باره نگفته بود. cry
ارتباط کامپیوتر با آردوینو

  • SERIAL_5N1 :
  • SERIAL_6N1 :
  • SERIAL_7N1 :
  • SERIAL_8N1 : data=8bit , stop=1bit , parity=0bit  ( default )
  • SERIAL_5N2 :
  • SERIAL_6N2 :
  • SERIAL_7N2 :
  • SERIAL_8N2 :
  • SERIAL_5E1 :
  • SERIAL_6E1 :
  • SERIAL_7E1 :
  • SERIAL_8E1 :
  • SERIAL_5E2 :
  • SERIAL_6E2 :
  • SERIAL_7E2 :
  • SERIAL_8E2 :
  • SERIAL_5O1 :
  • SERIAL_6O1 :
  • SERIAL_7O1 :
  • SERIAL_8O1 :
  • SERIAL_5O2 :
  • SERIAL_6O2 :
  • SERIAL_7O2 :
  • SERIAL_8O2 :

خب حالا اگه بخوایم از برد های سری مگا آردوینو استفاده کنیم همون طور که میدونید این برد 3 تا ارتباط سریال داره با نام های سریال1، سریال2 و سریال3 در حالی که برد های بر مبنای atmega328 دارای یه دونه سریال هستن و اون در پایه های 0 و 1 هستش.، خب میگفتم: برای برد های سری مگا از کدهای زیر استفاده میکنیم.

Serial.available
Serial.available : اگه دیتایی برای خوندن موجود باشه این تابع اعلام میکنه ، و این قابلیت رو داره تا ۶۴ بایت اطلاعات اطلاعات آماده دریافت در بافر دریافت سریال ذخیره کنه.

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

که دستور شرطی بالا وقتی اجرا میشه که دیتایی از طرف فرستنده اطلاعات به سمت گیرنده اطلاعات ارسال شده باشه.
کاربرد این تابع ۱ : مثلا اگه یه برنامه بنویسید که گیرنده اطلاعات رو از فرستنده دریافت کنه و نمایش بده ، اگه از این تابع استفاده نکنیم این گیرنده هی دیتا نشون میده رو نمایشگر(فضای خالی یا همون space نشون میده) ، که باعث هنگ کردن یا رفتن به یه حلقه بینهایت ارسال و دریافت و نمایش اطلاعات میشه ، ولی اگه از این تابع استفاده کنیم تنها زمانی دیتا دریافت میشه و نمایش داده میشه که دیتایی ارسال شده باشه از طرف فرستنده.
کاربرد این تابع ۲ : دریافت اطلاعات تنها زمانی که اطلاعات ارسال میشه(به نقل از arduinoworld ) >>>توضیح خوبی هستش گفتم بزارم بهتره smile
توجه : این تابع در قسمت گیرنده اطلاعات استفاده میشه.

یه مثالکی از دو تابع گفته شده بالا

Serial.end
Serial.end : این تابع برا پایان دادن به کار ارتباط سریال هستش ، و دیگه پایه های ۰ و ۱ آردوینو(TX , RX) در نقش ارتباط سریال نیستند و در نقش ورودی/خروجی هستند ؛ برای روشن کردن دوباره ارتباط سریال(بعد از خاموش کردن ارتباط سریال با این تابع) باس دوباره تابع Serial.begin رو فراخونی کنید. rtfm

خب تابع بالا برا میکروها و برد های آردوینو یی بود که فقط یه پورت سریال دارن، حالا مثلا در بردهای سی مگا که 3 تا پورت سریال دارن برا بستن هر کدوم باید چیکار کنیم؟ بله از کدهای زیر استفاده میکنیم. laugh

Serial.print
Serial.print : این تابع کارش ارسال اطلاع هستش که به فرم زیر هستش

data : معلومه دیگه ، اطلاعاتمون که قراره ارسال بشه.
format : نوع داده یا تعداد اعشار اعداد اعشاری رو تعیین میکنیم.

تابع اولی : که در زیر انواع اطلاعاتی رو که میشه بهش داد رو میبینید ، تنها نکته ای که وجود داره اینه که ، اعداد اعشاری رو با دو رقم اعشار ارسال میکنه و بقیه ارقام اعشار رو در نظر نمیگیره ، و در ارسال متن رشته ابی(چند تا کلمه ، حرف و یا عدد و...) ، ارسال عدد صحیح ، ارسال کاراکتر چیز خاصی برا گفتن وجود نداره. blum
منظور از <<< یعنی کد سمت چپ جوابش میشه کد سمت راست crazy

تابع دومی : تو این تابع دومی باید ۲ تا مقدار data و format رو به تابع بدیم.(نه بابا...از کجا فهمیدی laugh )

توجه ۱ : همون طور که میبینید میشه فرمت ارسال دیتا رو هم توسط قسمت format تعیین کرد که انواع BIT (باینری) ، OCT (اکتال) ، DEC (دسیمال یا همون ده دهی) و HEX (هگزا) رو مشاهده میکنید و اگه دیتامون یه عدد اعشاری باشه ، format تعداد ارقام اعشار رو برا ارسال تعیین میکنه.
توجه ۲ : اگه از bin , hex , oct , dec چیزی نمیدونید مطالب زیر رو ببینید(اگه مطالب خوب نبودن باس خودتون آستین رو بدین بالا و تو گوگل سرچ کنید)
باینری، اوکتال، دسیمال و هگزادسیمال : مطلب ۱ ، مطلب ۲ ، مطلب ۳ , مطلب ۴

توجه ۳ (مهم نیست) : میتونیم متنی رو ارسال کنیم که داخل حافظه flash برمون قرار داره ، باید به صورت زیر عمل کنیم :

Serial.println
Serial.println : خوب این تابع و هم بگم و مطلب رو تموم کنم و بقیش رو بزارم جلسه بعد ، داغوش شدم بابا laugh ....میرم موقع استراحت pes2013 بازی کنم هی از بازی خارج میشه و حال آدمو میگیره bomb .....بگذریم از این حرف های بیهوده و بریم سر اصل مطلب buba
این تابع تقریبا همون تابع Serial.print هستش فقط با این تفاوت که وقتی دیتا رو ارسال کرد دستور رفتن به خط بعد("n\") رو هم ارسال میکنه(به طور خودکار) و همانند تابع Serial.print به دو صورت میشه نوشتش(بسته به نیازتون باس انتخاب کنید که از کدومش باید استفاده کنی)

یه ـــمـــثـــالـــ برا نمایش تفاوت بین تابع Serial.print با Serial.println

پروژه بالا(کد های بالا) رو در زیر توضیح میدم :
خطوط ۵ تا ۱۱ اطلاعاشون رو نشون میدن و چون تابع هاشون از نوع Serial.println هستش لذا نیاز نیست دستور رفتن به خط بعدی رو ارسال کنیم.(این تابع بعد از نمایش دیتا به طور خودکار دستور رفتن به خط بعدی رو ارسال میکنه)
تو خط ۱۳ اومدیدم و کد زیر رو نوشتیم که یعنی رفتن به ۲ سطر بعدی (بره ۲ خط بعدی) و به هر تعداد که کد n\ رو داخل اون  " " بنویسیم به همون تعداد میره خط بعد ، چون در کد زیر ۲ بار نوشتیمش لذا میره ۲ خط بعدی ، و اگه مثلا ۵ تا میزاشتیم میرفت ۵ خط میرفت جلو.

اما خطوط ۱۵ تا ۲۷ چون از نوع Serial.print هستن بعد از نمایش دیتا دستور رفتن به خط بعد رو ارسال نمیکنن و ما باس خودمون این کار انجام بدید و اگه توجه کنید بعد از هر بار نمایش دیتا توی این خطوط دستور زیر رو قرار دادیم که این دستور باعث رفتن به خط بعدی(سطر بعدی) میشه.
اگه توجه کنید بین خط ۲۱ و ۲۲ نگفتم بره خط بعد ؛ جواب پروژه رو ببینید ، مقدار این دو تا تابع پشت سر هم و به صورت ۴E1 نمایش داده شده

تو خطوط ۳۱ تا ۳۸ هم اگه توجه کنید هر جا که به تابع Serial.println رسیدیم ، این تابع بعد از نمایش اطلاعات دستور رفتن به خط بعد رو صادر کرده.

اینم از جواب پروژه بالا(کد های بالا) >>> فعلا کاری نداشته باشید جواب رو چطور ابردم ، تو جلسات بعدی کامل توضیح میدم.
آموزش ارتباط سریال در آردوینو

توجه مهم : بعضا دیده شده که پروژه ها تو پروتئوس مثل آدم کار نمیکنن و دقیقا همون جوابی رو که میخوایم رو بهمون نمیدن که این مشکل از پروتئوس هستش و نه از پروژه ما....همین الان همین مشکل برخودم و در عمل تست کردم و فهمیدم که مشکل از پروتئوس هستش. bb  ، البته دفه ی اولم نیست که همچین مشکلی با پروتئوس پیدا میکنم ، کلا تو شبیه سازی ماژول ها , lcd های گرافیکی و قطعات جدید مثل همین آردوینو زیاد خوب عمل نمیکنه. dash  و باس عملی تست کنیم.

خب خدا رحم کنه ، ۴ تا تابع رو گفتم شد 2130 واژه (تعداد خطوط این مطلب) shock ، حالا بقیه توابع رو بخوام بگم چقدر میشه ، انشاالله که با حوصله میشینیم و بقیش رو مینویسیم….. mail
اگه جایی چیزی رو نگفتم جا انداختم کم گفتم و… لطفا بهم بگید. pardon

 

امیدوارم از این مطلب ناچیز خوشتون اومده باشه >>>> اگه اومد تعجیل در فرج آقا و شادی روح شهدا و امام شهدا  ۳ صلوات بفرستید.(هزینه استفاده از این مطلب)

فعلا یا علی تا مطلب بعد

انجمن های تخصصی برق و الکترونیک ECA
مهدی دمیرچیلو جنگ ما فتح قدس را به همراه خواهد داشت. [ امام خمینی (ره) ]
ارسال دیدگاه

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    محمد

    دمتون گرم

  2. Avatar

    مهمان

    AMIRam

    اقا سلام
    یه سوال داشتم
    میشه چنتا سنسور ب اردوینو وصل کنم حالا چ با خروجی انالوگ ک سنسورو ب پایه انالوگ وصل کنم چ دیجیتال ک ب پایه های دیجی تال وصل کنم و اطلاعات و داده هاشونو همه رو ب صورت هم زمان با ارتباط سریال به کامپیوتر ارسال کنم؟

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام / بله میشه.
      فقط باید به پروتکول ارتباطی سنسورها هم دقت کرد، مثلا جفت سنسورا uart باشن و شما از Uno استفاده کنید، uart کم میارید و باید میکروتونو تغییر بدید

1 2