به نام خدا
آموزش پروژه محور آردوینو – جلسه پنجم سریال مانیتور
در این جلسه میخواهیم با سریال مانیتور آردوینو کار کنیم . سریال مانیتور یکی از قابلیت های نرم افزار آردوینو هست که با آن میتوانیم یک متن را از آردوینو دریافت کنیم یا یک متن را برای آردوینو بنویسیم و بفرستیم . این ابزار کار ما را در خیلی از مواقع راحت میکند ، برای مثال هنگام نمایش اطلاعات سنسور میتوانیم از ال سی دی های کاراکتری و سایر ماژول های ال سی دی استفاده نکنیم و از سریال مانیتور آردوینو برای این کار استفاده کنیم .
در جلسه قبل میتوانستیم حالت ال ای دی ها را در سریال مانیتور آردوینو نمایش دهیم .
در این جلسه از سخت افزار و مدار جلسه قبل استفاده خواهیم کرد .
سریال مانیتور :
کد های آماده شده را در برنامه آردوینو قرار میدهیم .
برای دانلود کد های برنامه و حمایت مالی از ما بر روی لینک زیر کلیک کنید .
دانلود فایل
بعد از این که برنامه را بر روی برد آپلود کردید ، بر روی گزینه ای که در شکل زیر با دایره قرمز مشخص شده کلیک کنید .
یک پنجره شبیه زیر باز خواهد شد .
این پنجره همان پنجره سریال مانیتور است که قسمتی از برنامه آردوینو میباشد . در این پنجره میتونیم پیام خود را بنویسیم و برای آردوینو بفرستیم و یا پیامی را از آردوینو دریافت کنیم .
پیام Enter LED Number 0 to 9 or ‘x’ to clear در شکل بالا توسط برد آردوینو ارسال شده است . این اولین پیامی است که از برد آردوینو دریافت شده است و به ما نشان میدهد که ارتباط بین برد آردوینو و کامپیوتر به درستی برقرار شده است . اگر برنامه مناسبی را بر روی برد آردوینو ریخته باشیم ( مناسب برای دریافت اطلاعات از سریال مانیتور ) میتونیم در نوار بالای سریال مانیتور متن خود را بنویسیم و بر روی گزینه Send کلیک کنیم .
در این برنامه میتونیم یک عدد بین ۰ تا ۹ یا حرف x را در نوار بالای سریال مانیتور تایپ کنیم و Send را بزنیم . وارد کردن x تاثیری ندارد اما اگر ال ای دی روشن باشد خاموش میشود ولی با وارد کردن عدد ، ال ای دی مربوط به آن شماره روشن میشود و حالت آن در سریال مانیتور نشان داده میشود . حال که ال ای دی ها روشن شدند با وارد کردن حرف x میبینیم که ال ای دی ها خاموش خواهد شد .
کد های آردوینو :
در اول برنامه تابع 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 بعدی میرود .
خط بعدی برنامه به صورت زیر است :
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 را برای سریال مانیتور ارسال میکند .
پایان جلسه پنجم . تا جلسه بعدی خدانگهدار
این کد در لنوناردو کار نکرد اما با اضافه کردن این خط مشکل حل شد
Serial.begin(9600);
while(!Serial);
سلام
من با آردوینو لئوناردو کار نکردم ولی روی مدل UNO و NANO و MICRO جواب خواهد داد