نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

آموزش جامع آردوینو جلسه 18 software serial

به نام خدا : تو این مطلب از آموزش آردوینو جلسه 18 میخوام به آموزش استفاده از کتابخونه ارتباط سریال مجازی رو بگم تا دیگه مجبور نباشید به علت کم بودن پایه های ارتباط سریال برید میکروهایی مثل برد آردوینو مگا رو بخرید، با این کتابخونه میتونید رو هر پایه ای به هر تعدادی ارتباط سریال برقرار کنید(پایه های میکرو تقسیم بر 2 = تعداد uart که میتونید بسازید) ، این مطلب ترجمه شده ی! مطلب سایت آردوینو به نشانی SoftwareSerial هستش.(اینو گفتم تا برید کم کم سراغ انگلیسی خوندن، این سایت آردوینو هم متن انگلیسیش ساده هستش و به راحتی میتونید از خود سایت آردینو، خود آردینو رو یاد بگیرید و انگلیسیتون رو هم قوی کنید.) >>>> آموزش جامع آردوینو جلسه 18 software serial
آموزش جامع آردوینو جلسه 18 software serial

آموزش جامع آردوینو جلسه 18 software serial


قبلا مطالبی درباره usart سخت افزاری گفتم و تو سایت گزاشتم مطالبش رو که در زیر میبینید و میتونید برید بخونید، البته میتونید هم نخونید  laugh :
آموزش جامع آردوینو جلسه 4
آموزش جامع آردوینو جلسه 5
آموزش جامع آردوینو جلسه 6
 

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

این کتابخونه رو میتونید در زیر دانلود کنید و نصبش کنید(همون کپیش کنید ^_^)

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

 
این کتابخونه شامل توابع عمومی زیر هستش(یه سری توابع خصوصی هم داره ولی ما لازم نیست ازشون استفاده کنیم، حالا شمایی که من میشناسم توابع عمومی رو ول میکنید یه راست میرید سراغ توابع خصوصی laugh کلا چیزای خصوصی رو دوست دارید، از شوخی بگذریم، یه سری از توابع رو معمولا خصوصی میکنن، ممکنه به کار کاربر نیاد به صورت مستقیم و یا اگه کاربر از توابع خصوصی به صورت ناشیانه استفاده کنه ممکنه مشکلاتی ایجاد بشه و… کلا بیخیال توابع خصوصی بشید، توابع عمومی رو در زیر براتون میزارم، با کلیک بر روی هر کدوم به منبعش میرید)

 
در زیر یه سری نکات رو براتون میگم که خوندنش خالی از لطف نیست.
توجه 1 : اگه از ارتباط سریال سخت افزاری استفاده میکنید، در اون پایه های سریال سخت افزاری نمیتونید سریال مجازی برقرار کنید، و باید سریال سخت افزاری اون پایه ها رو غیر فعال کنید تا بتونید سریال مجازی روشون اعمال کنید(عمرا کسی فهمیده باشه، در زیر به یه روش دیگه توضیح میدم) >>> خب همون طور که میدونید پایه های 0 و 1 برد آردوینو (و پایه های 0 و 1 و 14 تا 19 در برد مگا) پایه های ارتباط سریال سخت افزاری هستن، حالا اگه شما از ارتباط سریال سخت افزاری استفاده کنید، این پایه ها میرن تو نقش سریال سخت افزاری، حالا اگه بخواین از ارتباط سریال مجازی روی این دو تا پایه استفاده کنید نمیشه دیگه، نه جدا فک کردی میشه؟ خب معلومه نمیشه، یا باید بیخیال سریال مجازی روی این دو تا پایه بشید و برید سراغ پایه های دیگه، و یا این که سریال سخت افزاری اون پایه ها رو غیر فعال کنید و براشون سریال مجازی رو فعال کنید…….اووووووووووف عجب توضیحی!!   bomb
توجه 2 : در برد های سری مگا، تنها پایه های زیر میتونن در نقش RX قرار بگیرن :

10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8, A9, A10, A11, A12, A13, A14, A15

توجه 3 : در بردهای لئوناردو و میکرو تنها پایه های زیر میتونن در نقش RX قرار بگیرن :

8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)

توجه 4 : در برد Arduino or Genuino 101 ماکزیمم سرعت RX برابر 57600bps هستش.
توجه 5 : در برد Arduino or Genuino 101 پایه RX بر روی پایه 13 عمل نمیکند و لذا نباید RX رو به این پایه منتسب کرد.
توجه 6 : ماکزیمم سرعت برابر 115200bps هستش(استثناها در بالا ذکر شدن)
 
دیگه بریم سراغ توضیح تک تک این توابع :
 

Library

برای استفاده از این کتابخونه باید در اول پروژه فراخونی کنید این کتابخونه رو، یعنی کد بالا رو در اول پروژه قرارش بدید.

 
SoftwareSerial

rxPin : پایه ای که میخواین RX باشه.
txPin : پایه ای که میخواین TX باشه.
inverse_logic : مهم نیست فعلا و نمیخواد ازش استفاده کنید(بجاش چیزی قرار ندید، انگار که تابع 2 تا پارامتر داره)
نحوه استفاده از این تابع به صورت زیر هستش :

همون طور که میبینید الان پایه های 2 و 3 تبدیل شدن به پایه های RX و TX ارتباط سریال مجازی ما.

سوال : در کد بالا اون mySerial داستانش چیه؟
جواب : خب نمیخوام زیاد به بحث برنامه نویسی بپردازم، فقط اینو بگم که : همون طور که گفتم مثلا 10 تا ارتباط سریال مجازی(تعداد ورودی خروجی های بردمون تقسیم بر 2) میتونیم داشته باشیم در بردمون و لذا باید برا هرکدوم اسم مشخصی بزاریم، مثلا من در پروژه ام از یه ارتباط سریال مجازی استفاده میکنم و اسمش رو گزاشتم mySerial و حالا شما میتونید هر اسمی که دوست داری قرار بدید، مثلا بنویسید علی، تنقی، نقی، دیوار، بربری، سنگک laugh و یا هر اسمی که دوست داشتین، فقط اگه بخواین 2 تا ارتباط سریال مجازی بسازین باید از کد بالا دو بار استفاده کنید(که معلومه) و اسم ارتباط سریال ها رو هم متفاوت از هم تعیین کنید.
خب بعد از استفاده از تابع بالا(البته لفظ تابع درست نیست و شئی بگیم فک کنم درست تر باشه، در هر صورت مهم نیته^_^)، باید پایه هایی که استفاده کردین در در اول تابع Setup ورودی/خروجیشون رو تعیین کنید، مثلا برای کد بالا باید از کد زیر استفاده کنید(پایه RX رو ورودی میکنیم و پایه TX رو خروجی میکنیم - دلیلش هم معلومه، پایه دریافت کننده اطلاعات باید ورودی باشه و پایه ارسال کننده اطلاعات باس خروجی تعریف بشه) :
 

 
begin

خب این تابع برای تنظیم سرعت نرخ انتقال داده (baud rate) هستش، که به جای speed میتونید مقادیر زیر رو قرار بدید.
توجه : speed در فرستنده و گیرنده باید یکسان باشه.

300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600, and 115200

 
مثال : خب تا اینجا توابعی رو که گفتم باید به صورت زیر استفاده کنیم(البته اون نام mySerial و او نسرعت 9600 دلبخواهی هستش و میتونید شما تغییرش بدید و همچنین پایه های 2 و 3 یعنی پایه های ارتباط سریال مجازی رو هم میتونید تغییر بدید) :

 
available

این تابع تعداد بایت های موجود برای دریافت رو بر میگردونه.
 
مثال : 

 
read

این تابع برا خوندن دیتا هستش(البته باید دیتایی موجود باشه که بتونه بخونه، برا این کار میتونید از تابع available استفاده کنید و هم موقع دیتایی برا دریافت موجود بود، از تابع بالا استفاده کنید و اون دیتا رو شکارش کنید ^_^)
مثال :

 
print & println
خب تو این قسمت میخوام دو تابع زیر رو بگم

دو تابع بالا برای ارسال دیتا هستن اولی دیتا(data) رو فقط ارسال میکنه و دومی علاوه بر ارسال دیتا میاد و کاراکتر رفتن به خط بعدی رو هم ارسال میکنه.
data : یه رشته و یه کاراکتر و یا یه متغییر صحیح و اعشاری
مثال : 

 
write

این تابع برای ارسال به صورت کاراکتر هستش.
مثال : 

 
 
توابع زیر هم بمونه برای بعد، خسته شدم فعلا(البته توابع اصلی همونایی بود که در بالا گفتم، یه سری توابع جزئی هستش که در زیر میبینید و اینم بعدا میگم) :
peek – overflow – isListening – listen
 
تو خود کتاب خونه یه 2 تا مثال هستش حالا اگه کسی خواست بگه تا مثال بیشتر بزنم.
در ضمن کسی اگه مطالب ارتباط سریال سخت افزاری رو اگه خونده باشه این مطلب براش خیلی ساده و رووون میشه.
خب امید وارم این مطلب مفید بوده باشه براتون، هزینه این مطلب^_^(البته قابلتون رو نداره هااااا) 3 تا صلوات برا شادی روح شهدا و امام شهدا هستش.
خاطرات من در دانشگو قسمت N ام : حالا برا شادی روح خودتون هم یه عکس بزارم، شنیدین که میگم … کردی آب قطعه؟ حکایت عکس زیر و داستان زیر هستش، یکی از بچه ها تعریف میکرد رفتیم دستشویی و بعد آخر سر دیدیم آب قطعه، اون ساعت هم امتحان داشتم، با کلی دردسر و دستمال و … کارمون رو انجام دادیم و اومدیم بیرون ولی نیم ساعت دیر رسیدیم به سر امتحان(الته اون موقع این رفیق بنده خدای ما که رفته بود WC همچین کاغذی نبود که ببینه، چند وقت من من خواستم برم تا این برگه رو دیدم درجا با سرعت نور رفتم سراغ یه مرکز دیگه laugh ) >>>> یکی نیست بگه داستان قطعی هستش که اینا رو میگی آخه focus
خاطرات من در دانشگو
فعلا یا علی
 

گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو امیدوارم مطالب ناچیز این سایت مفید باشه براتون؛ به امید روزی که دانسته هامونو به اشتراک بزاریم، حالا پولی یا رایگانش زیاد مهم نی؛ بعضی ها فک میکنن چیزی که بلدن، اگه با دیگران به اشتراک بزارن ... !
ارسال دیدگاه
27

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

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

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

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

  1. Avatar

    مهمان

    صادق

    ا
    داداش سلام من یه مشکل مسخره دارم یه ماژول gpsخریدم ک میخوام خروجیش رو تو سریال مانیتور ببینم اما با سریال نرم افزاری نمیشه چون تابعseryal.readفقط کاراکتر میخونه
    میشه یه کدی بدی ک فقط خروجی نششون بده همین؟؟
    به مولا جز تو کسیو ندارم بپرسم ج بده

  2. Avatar

    مهمان

    چیپ آنلاین

    با سلام
    من میخوام با آردوینو از طریق ارتباط سریال (rs232) یه کدی مثل این رو ارسال کنم :
    ۰۰۲۰۴۳۹۵۷۳۱۷|۱۵|۰۶۲۰۰۶۳۶۲۰۹۹۴۲۴|۰۶۱۰۴۵۷۷|۰|۰۰۰۰۰۰۰۰۱۰۰۰|۰۱|۰|۰۱|۰|۰|۰۰|۰۰
    ممنون میشم راهنمایی کنید، چون به هر روشی که کد رو ارسال میکنم سمت گیرنده دیتا رو به درستی دریافت نمیکنه، چرا که دیتای ارسالی به صورت تیکه تیکه و در چند قسمت مثلا ۴ قسمت ارسال میشه . ممنون میشم راهنمایی فرمایید …

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

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

      مهدی دمرچیلو

      سلام
      کدتو بفرست ببینم چطوری میفرستی – کد کامل

  3. Avatar

    مهمان

    علیرضا دانشکده منتظری مشهد

    سلام // میشه اموزش اردینو رو بصورت پی دی اف بذارید تو سایت بصورت کامل تا دانلود کنیم و بتونیم پرینت بگیریم اینطوری چیزی نمیفهمیم

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

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

      مهدی دمرچیلو

      سلام – وقت ندارم مطالب رو pdf کنم.

  4. Avatar

    مهمان

    علی

    با سلام یه برانه تو نرم افزار زدم دگمه verifyمیزنم پیغام زیر میده
    D:irNew FolderNRF24L01cod_recivcod_reciv.ino:7:23: fatal error: SerialLib.h: No such file or directory
    #include
    ^
    compilation terminated.
    exit status 1
    Error compiling for board Arduino/Genuino Uno.
    ایا باید اون کتابخانه کهبالا گذاشتید تو نرم افزار بذارم؟؟؟؟؟؟

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

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

      مهدی دمرچیلو

      سلام.فایل SerialLib.h رو پیدا نمیکنه…..پروژه این مطلب این خطا رو میده؟

  5. Avatar

    مهمان

    محمد ناصری

    سلام کارت خیلی درسته مهندس دمرچیلو
    اینکه DATA رو از I2Cگرفت رو متوجه شدم ولی ارسالش به یه پورت 485رو نفهمیدم با چی براش تو چند بازه دیتا ارسال کنم و چطور بهش دستور بدم؟

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

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

      مهدی دمرچیلو

      متجوه نشدم – الان آموزش 485 رو میخوای؟

  6. Avatar

    مهمان

    محمد

    سلام
    داداش من یه نظر دادم سوال پرسیدم اما خبری ازش نیست
    در دست برسیه؟تایید نشده؟جریان چیه؟

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

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

      مهدی دمرچیلو

      نه داش حوصلم نمیشد جواب بدم
      به قطعه 200 تومنی سفارش دادم – تو سایت پست نوشته تحویل داده شده ولی تو خونه کسی چیزی نگرفته – همسایه ها هم همین طور
      یه 1ساعتی کسی خونمون نبوده – شاید اون موقع مامور پست اومده جلو درمون – الان 2 روز کارم عقب اوفتاده – شنبه برم پست ببینم جریان چیه و محموله رو به کی داده dash

  7. Avatar

    مهمان

    محمد

    سلام
    من میخوام از دو تا ماژول بلوتوث و rfid همزمان روی برد آردوینو due استفاده کنم وقتی دستورات رو مینویسم و دو تا سریال نرم افزاری تعریف میکنم (این جوری نوشتم)
    ;(SoftwareSerial EMserial(4, 5
    ;(SoftwareSerial HCserial(6, 7
    ولی مشکلم اینه که هر کدوم از این دستورات رو بنویسم فقط اولی کار میکنه
    یعنی مثلا اگه بلوتوث رو به HCserial وصل کنم و rfid رو به این EMserial فقط ماژول بلوتوث کار میکنه حالا اگه دستورات رو جا به جا کنم یعنی این شکلی
    ;(SoftwareSerial HCserial(6, 7
    ;(SoftwareSerial EMserial(4, 5
    و به همون ترتیب وصل کنم فقط ماژول بلوتوث کار میکنه چه جوری این جوری میشه؟؟دلیلش چیه؟
    جونم رو بالا آورده یعنی هر جوری که تونستم کرم ریختم سرش و نشد

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

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

      مهدی دمرچیلو

      سلام
      والا من خودم همیشه برا این دست موارد از سریال سخت افزاری استفاده میکنم و از سریال نرم افزارری استفاده نمیکنم.
      الان به نظر من برو ببین این کتابخونه سریال نرم افزاری به چه صورت نوشته شده و روال کارش به صورت هستش – یا باید از وقفه خارجی استفاده کنه یا از پایه معمولی که این روش دوم به نظر من باعث میشه دیتا از بین بره

      • Avatar

        مهمان

        محمد

        چاره ای ندارم برد uno یه دونه سریال سخت افزاری داره
        حالا فعلا سرشا کلاه گذاشتم اومدم برا بلوتوث یه دونه سریال نرم افزاری ساختم و rfid رو وصل کردم به سریال سخت افزاری
        الان سریال سخت افزاری هم به کامپیوتر وصله هم به rfid فرستدندش رو کامپیوتر گذاشتم باشه گیرندش رو وصل کردم به rfid

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

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

          مهدی دمرچیلو

          از مگا هم میتونی استفاده کنی

    • Avatar

      مهمان

      mohammad

      سلام
      کلا در لحظه فقط میشه یک سریال نرم افزاری رو باز کرد برای اینکه از 2 تا استفاده کنی باید از تابع listen کمک بگیری

  8. Avatar

    مهمان

    امید

    سلام آقا مهدی، خسته نباشی داداش،خدا قوتحوصله تعریف کردن ازت رو ندارم ولی کارت خیلی درسته،اجرت با خود خدا
    آقا یه سوال، میشه فرکانس کلاک کار کردن پردازنده های آردوینو رو تغییر داد؟
    و اینکه واسه آردوینو Due نوشتن که فرکانس کاریش 84 مگاهرتزه، این یعنی همون موقع که واسه اولین بار روشنش میکنی فرکانس کاری پردازندش، 84 مگاهرتزه یا باید دسکاریش کنی که به این سرعت برسه؟

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

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

      مهدی دمرچیلو

      سلام
      آره میشه – کار نشد نداره
      ولی چون فرکانس ها روی حداکثر تعیین شده کسی دیگه نمیاد فرکانس پایین تنظیم کنه.
      due اطلاع ندارم

  9. Avatar

    مهمان

    حمید

    خیلی خوب بود…..منتظر جلسات بعدی هستیم…..

  10. Avatar

    مهمان

    علی

    آموزشهاتون خیلی عالیه همیشه منتظر مطلب جدیدم.

  11. Avatar

    مهمان

    peyman5530

    بافر سریال نرم افزاری 64بایته پس اگه اطلاعات دریافتی بیش از این باشه اطلاعات از بین میره!!

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

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

      مهدی دمرچیلو

      فک کنم همین طور باید باشه –

      • Avatar

        مهمان

        peyman5530

        مطمئن باش….. چون تست کردم این موضوع رو.
        تابع findهم رو سریال نرم افزاری جواب میده.

  12. Avatar

    مهمان

    آرش

    سلام….برای غیر فعال کردن سریال سخت افزاری و فعال کردن نرم افزاری از چه کدی باید استفاده کنیم؟؟توی برد های سری مگا با غیر فعال کردن سریال سخت افزاریشون میشه از سریال نرم افزاری استفاده کرد؟؟

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

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

      مهدی دمرچیلو

      سلام
      موردی که هستش اینه که مثلا تو برد UNO پایه 0 و 1 برا سریال سخت افزاری هستش
      شما میتونید از پایه های دیگه(غیر از 0 و 1) برای سریال نرم افزاری استفاده کنید
      ولی اگه میخواید حتما حتما رو پایه های 0 و 1 سریال نرم افزاری برقرار کنید نباید سریال سخت افزاری این دو پایه رو فعال کنید(یعنی نباید از کد SERIAL.BEGIN استفاده کنید یعنی نباید سریال سخت افزاری رو به کمک این تابع فعال کنید) – حالا که سریال سخت افزاری این دو پایه رو فعال نکردید – این دو پایه، دو پایه در نقش ورودی/خروجی ساده(پایه دیجیتال معمولی) هستن و میتونید روشون ارتباط سریال نرم افزاری برقرار کنید.

      • Avatar

        مهمان

        وحید

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

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

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

          مهدی دمرچیلو

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