رباتیک و هوافضا

آموزش پروژه محور آردوینو – جلسه پنجم سریال مانیتور

جلسه های آموزش پروژه محور آردوینو

به نام خدا

آموزش پروژه محور آردوینو – جلسه پنجم سریال مانیتور

در این جلسه میخواهیم با سریال مانیتور آردوینو کار کنیم . سریال مانیتور یکی از قابلیت های نرم افزار آردوینو هست که با آن میتوانیم یک متن را از آردوینو دریافت کنیم یا یک متن را برای آردوینو بنویسیم و بفرستیم . این ابزار کار ما را در خیلی از مواقع راحت میکند ، برای مثال هنگام نمایش اطلاعات سنسور میتوانیم از ال سی دی های کاراکتری و سایر ماژول های ال سی دی استفاده نکنیم و از سریال مانیتور آردوینو برای این کار استفاده کنیم .

در جلسه قبل میتوانستیم حالت ال ای دی ها را در سریال مانیتور آردوینو نمایش دهیم .

arduino_summary

 

در این جلسه از سخت افزار و مدار جلسه قبل استفاده خواهیم کرد .

سریال مانیتور :

کد های آماده شده را در برنامه آردوینو قرار میدهیم .
برای دانلود کد های برنامه و حمایت مالی از ما بر روی لینک زیر کلیک کنید .

 

دانلود فایل

 

بعد از این که برنامه را بر روی برد آپلود کردید ، بر روی گزینه ای که در شکل زیر با دایره قرمز مشخص شده کلیک کنید .

ide_serial_moniotor_button

 

 

یک پنجره شبیه زیر باز خواهد شد .

 

serial_monitor_0

 

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

پیام Enter LED Number 0 to 9 or ‘x’ to clear در شکل بالا توسط برد آردوینو ارسال شده است . این اولین پیامی است که از برد آردوینو دریافت شده است و به ما نشان میدهد که ارتباط بین برد آردوینو و کامپیوتر به درستی برقرار شده است . اگر برنامه مناسبی را بر روی برد آردوینو ریخته باشیم ( مناسب برای دریافت اطلاعات از سریال مانیتور ) میتونیم در نوار بالای سریال مانیتور متن خود را بنویسیم و بر روی گزینه Send کلیک کنیم .

در این برنامه میتونیم یک عدد بین ۰ تا ۹ یا حرف x را در نوار بالای سریال مانیتور تایپ کنیم و Send را بزنیم . وارد کردن x تاثیری ندارد اما اگر ال ای دی روشن باشد خاموش میشود  ولی با وارد کردن عدد ، ال ای دی مربوط به آن شماره روشن میشود و حالت آن در سریال مانیتور نشان داده میشود . حال که ال ای دی ها روشن شدند با وارد کردن حرف x میبینیم که ال ای دی ها خاموش خواهد شد .

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

 

serial_monitor

 

کد های آردوینو :

در اول برنامه تابع setup را میبینیم که ۳ خط به آن اضافه شده است .

    void setup() 
    {
      pinMode(latchPin, OUTPUT);
      pinMode(dataPin, OUTPUT);  
      pinMode(clockPin, OUTPUT);
      updateShiftRegister();
      Serial.begin(9600);
      while (! Serial); // Wait until Serial is ready - Leonardo
      Serial.println("Enter LED Number 0 to 7 or 'x' to clear");
    }

با دستور Serial.begin(9600) میزان بادریت ارتباط سریال را که از طریق پورت USB برقرار میشود را مشخص میکند . این عدد مقدار های مشخص شده ای میتواند داشته باشد . این مقدار ، سرعت انتقال داده را مشخص میکند .

خط بعدی که اول آن while است برای اطمینان از صحت ارتباط سریال قبل از ارسال پیام ها است .

آخرین خط از تابع setup هم پیامی را به سریال مانیتور ارسال میکند .

تابع loop که مدام در حال تکرار است به صورت زیر میباشد :

    void loop() 
    {
      if (Serial.available())
      {
        char ch = Serial.read();
        if (ch >= '0' && ch <= '7')
        {
          int led = ch - '0';
          bitSet(leds, led);
          updateShiftRegister();
          Serial.print("Turned on LED ");
          Serial.println(led);
        }
        if (ch == 'x')
        {
          leds = 0;
          updateShiftRegister();
          Serial.println("Cleared");
        }
      }
    }

این حلقه loop مدام در حال تکرار است و وقتی که ارتباط سریال توسط تابع Serial.available() بررسی شده و درست باشد بقیه دستور های حلقه اجرا میشود . پیام های ورودی به یک بافر میرود .

خط بعد به صورت زیر است :

    char ch = Serial.read();

توسط این دستور کاراکتر را از بافر دریافت میکنیم و از آن خارج میکنیم و آن را به متغیر ch نسبت میدهیم . این متغیر از نوع char است .

این کاراکتر همان طور که در بالا گفتیم بین ۰ تا ۷ یا x خواهد بود . توسط تابع if شرط ۰ تا ۷ بودن را چک میکنیم . هر کاراکتر با یک شماره خاص به نام کد اسکی شناخته میشود . این به معنی آن است که هنگام بررسی شرط ، کد اسکی آن ها چک میشود . اگر کارکتر وارد شده بین ۰ تا ۷ نبود به if بعدی میرود .

بیشتر بخوانید...  راه اندازی ماژول مخابراتی 315 با آردوینو

خط بعدی برنامه به صورت زیر است :

int led = ch – '۰';

حالا محاسبات را بر روی کاراکتر ها انجام میدهیم . در این خط هر کارکتری که وارد شده را منهای کارکتر ۰ میکنیم (توجه کنید کارکتر ۰ نه عدد مثلا از نوع بایت ۰ ) با این کار کد اسکی آن ها از هم کم میشود ( کاراکتر ها نمیتوانند به طور عادی با یک دیگر از عملگر های محاسباتی استفاده کنند ) . با این کار ما کاراکتر ۰ منهای کاراکتر ۰ برابر میشود با عدد ۰ و کاراکتر ۷ منهای کاراکتر ۰ برابر میشود با عدد ۷ .

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

    bitSet(leds, led);
    updateShiftRegister();

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

          Serial.print("Turned on LED ");
          Serial.println(led);

در خط اول تابع Serial.print را استفاده کردیم و در خط بعدی تابع Serial.println را استفاده کرده ایم . تفاوت دو تابع بالا در این است که تابع اول توانایی رفتن به خط جدید را ندارد ولی تابع خط دوم بعد از پایان ارسال داده به خط بعدی میرود . اول عبارت Turned on LED را برای سریال مانیتور میفرستیم و بعد در خط دوم شماره ال ای دی را میفرستیم و خط جدید را شروع میکنیم .

تابع if بعدی ، x بودن کارکتر وارد شده را چک میکند .

if (ch == 'x')
    {
      leds = 0;
      updateShiftRegister();
      Serial.println("Cleared");
    }

اگر کاراکتر وارد شده برابر با x بود همه ال ای دی ها را خاموش میکند و پیام Cleared را برای سریال مانیتور ارسال میکند .

 

پایان جلسه پنجم . تا جلسه بعدی خدانگهدار

 

 

 

 

 

 

دیدگاه‌ها (2)

*
*

    علی اکبر سعیدی مهمان مرداد 22, 1398 پاسخ

    این کد در لنوناردو کار نکرد اما با اضافه کردن این خط مشکل حل شد
    Serial.begin(9600);
    while(!Serial);

      Admin مدیر کل آبان 14, 1399 پاسخ

      سلام
      من با آردوینو لئوناردو کار نکردم ولی روی مدل UNO و NANO و MICRO جواب خواهد داد