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

دستورات ارتباط سریال آردوینو (آموزش کامل توابع Serial)

در این مقاله با توابع ارتباط سریال در برد های آردوینو آشنا خواهیم شد. همچنین متوجه میشویم Serial.begin(9600) یعنی چه.

Serial.Begin(9600)

بی شک مهم ترین تابع در زمینه ارتباط سریال، Serial.Begin است. عدد 9600 در این تابع به معنی سرعت یا نرخ باود (Baud Rate) است. میتوانید هر مقداری را درون این تابع قرار دهید به شرطی که دستگاه دوم شما نیز با همین نرخ باود کار کند.

Serial.begin(speed)

در حقیقت دستور Serial.begin(9600) به آردوینو میگوید ارتباط سریال را در پایه های Rx و Tx با نرخ 9600 آغاز کند.

Serial.available()

تابع Serial.available() بررسی میکند که آیا داده های سریال در دسترس هستند یا خیر. یعنی اگر داده های سریال موجود باشند تابع Serial.available() مقدار 1 را بر میگرداند. از این تابع اغلب در شروع کد و در یک شرط استفاده میشود. مثلا:

void loop() {
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.print(inByte, DEC);
}

Serial.find()

تابع Serial.find() داده ها از بافر سریال میخواند. اگر داده مربوطه یافت شود این تابع مقدار 1 را بر میگرداند و اگر هدف یافت نشود مقدار 0 را بر میگرداند.

Serial.find(target)

Serial.print()

تابع Serial.print() برای چاپ مقدار در سریال مانیتور یا ارسال مقادیر از طریق ارتباط سریال استفاده میشود. کافیست در میان پرانتز مقدار مورد نظر برای چاپ را بنویسید.

Serial.println()

تابع Serial.println() همانند تابع Serial.print() عمل میکند با این تفاوت که داده ها را در یک خط جداگانه مینویسد در صورتی که تابع Serial.print() داده ها را پشت سر هم مینویسد و مثلا در سریال مانیتور خوانایی آن پایین می آید.

Serial.read()

دستور Serial.read() داده های سریال ورودی را میخواند. این تابع به شکل Serial.read() در کد قرار میگیرد و کافی است مقدار یک متغیر را برابر با این تابع قرار دهیم تا داده های ورودی در آن ذخیره شود.

مثلا:

void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();

Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}

Serial.write()

تابع Serial.write() برای نوشتن و ارسال مقادیر از طریق ارتباط سریال استفاده میشود. این تابع داده های باینری را از طریق پورت سریال ارسال میکند.

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

مثلا:

void loop() {
Serial.write(45); // ارسال یک بایت داده با مقدار 45

int bytesSent = Serial.write("hello"); //ارسال یک رشته از طریق پروتکل سریال
}
3.7 (12 نفر)

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

13 نظر

  1. سلام…ممنون از آموزشهای مفیدتون…من میخوام عددی رو به صورت دستی در سریال مانیتور وارد کنم و براساس اون عدد تابع loop اجرا بشه…باید از کدوم دستور استفاده کنم؟؟

    1. سلام عزیز
      باید با Serial.read ورودی را بررسی کنید و در یک شرط مقایسه انجام بدید اگر برابر بود دستورات مورد نظر شما در ان شرط اجرا میشود.
      برای یادگیری برنامه نویسی آردوینو، دوره آردوینو را مشاهده کنید.

  2. سلام ببخشید یک سوال داشتم

    هنگامی که در سریال مانیتور کلماتی مینویسم
    واز دستور خواندن سرال استفاده میکنم بجای
    نشان دادن کلمات برای من اعدادی در سریال مانیتور نشان می‌دهد بنظر شما مشکل از کجاست

    1. اونها کد های asascii حروف شما هستند.هنگامی که شما یک کلید رو در کیبورد خود فشار میدهید…درواقع کد عددی اون عدد ارسال میشه.
      شما میتونید با لینک زیر کد های asascii هر کارکتر رو مشاهده کنید

  3. سلام خسته نباشید من برد به کامپیوتر وصل کردم اما وقتی که بزنه میریزم ودکمه بوت شم می گیرم برنامه آپلود میشه همون لحظه بیارم خطا میزنه فکر کنم درباره سریالشه چه کار باید بکنم ممنون میشم از راهنمایی آیا برد خرابه؟

    1. سلام عزیز
      باید متن ارور باشه، متن ارور رو در انجمن ارسال کنید بررسی کنیم

    2. سلام

      شماکفتید که باید کد برسی شود من دقیقا کد شمارا استفاده کردم
      void loop() {
      if (Serial.available()) {
      int inByte = Serial.read();
      Serial1.print(inByte, DEC);
      }

      ونرخ باود ریت هم تنزیم بود ولی در سریال مانیتور بجای نشان دادن کلمات اعدادی نشان می‌دهد اگر مشکل من را هل کنیید ممنون میشم

    3. این کد بایت ورودی رو به عدد دسیمال تبدیل میکنه. عددی که خارج میشه کد اسکی هست و تبدیل میشه به یکی از حروف
      اگر خط زیر رو
      Serial1.print(inByte, DEC);
      تبدیل کنید به
      Serial1.print(inByte);
      مشکل حل میشه
      برای کسب اطلاعات بیشتر در مورد ارتباط سریال و کار با سریال مانیتور بهتر هست دوره آردوینو رو مشاهده کنید مفصل توضیح داده شده

  4. درود و وقت بخیر محمد جان.یه گیر بسیار بدی توی پروژه پیدا کردم،البته من تموم کاربا اردویینو و ترکیب کدها رو با تحقیق توی سایتهای مختلف یاد گرفتم اما درگیری که الان دارم اینه که من سه تا سنسور لرزشی و حرکتی و اتش رو به یه اردویینو وصل کردم بهمراه کنترل ماژول رله ،سنسور حرکتی وقتی فعال میشه با جی اس ام پیامک میده اما زمانی که سنسور اتش یا سنسور لرزشی رو وصل میکنم سیستم قاطی میکنه هر کدوم و به تنهایی میتونم وصل کنم به اردویینو و بعد از فعال شدن پیامک میدن اما سه تا رو که باهم معرفی میکنم و برنامه هارو تلفیق میکنم فقط یکیرو خوب میشناسه، گیر من فکر میکنم فقط قسمت if و else, و while هست ،اگه اموزشی در این مورد هست ممنون میشم راهنماییم کنی،شاد باشی عزیزم،اگه توی همین ایمیلم بفرستی ممنونت میشم.

    1. سلام عزیز
      دوره آموزش آردوینو رو ببینید قطعا براتون مفید خواهد بود

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

دیدگاهتان را بنویسید

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