سلام رسیدیم به جلسه 6.
این جلسه میخوایم تمرکز کنیم روی کنسول آردوینو. تا حالا کنسول آردوینو رو باز کردید اصن؟ خب بیاید روی این آیتم:
وقتی که روی شکل کلیک می کنید وارد صفحه اصلی کنسول میشید.
خب اصن این کنسول به چه دردی میخوره؟
یکی از کاربردها استفاده از کنسول به عنوان نمایشگر هست. فرض کنید یه GPS داریم که میخوایم اطلاعات مربوط به اون رو مشاهده کنیم.یه راه اینه که LCD بزاریم و داده ها رو روش چاپ کنیم. یه موقع کاربری که داره کار می کنه نیازی نداره که داده روی LCD براش چاپ بشه همین که داده رو روی کامپیوتر ببینه براش کافیه. تو این شرایط بهترین و بی هزینه ترین روش اینه که از کنسول آردوینو استفاده کنه. یه نمونه از چاپ داده GPS رو میتونید تو شکل زیر ببینید:
ما از همین ویژه گی کنسول برای دیباگ کردن برنامه هامون هم استفاده می کنیم. یه موقع پروژه اینه که داده های سنسور دما رو روی یه سون سگمنت چاپ کنیم. کد رو می نویسیم و آپلود می کینم. به ظاهر همه چیز خوب پیش رفته و کامپایلر هم ارور نداده ولی می بینیم روی سون سگمنت هیچ عددی نمایش داده نمیشه. یکی از احتمالاتی که وجود داره اینه که داده سنسور یه جایی از بین رفته باشه(خطای کد نویسی). با استفاده از همین کنسول سریال میتونیم خط به خط برناممون رو دیباگ کنیم و ببینیم کجا داده سنسور از دست رفته(در جلسه های بعد مثال عملی می زنیم).
بیاین یه مثال عملی بزنیم. یه کد بنویسیم که هر کسی اسمشو توی کنسول آردوینو چاپ کنه. خب اسکچ رو باز کنید. با این صحنه مواجه میشید:
قدم اول برای ایجاد ارتباط سریال بین آردوینو و کامپیوتر، تعیین کردن نرخ ارسال داده (Baude Rate) هست به عبارت دیگه باید نرخ ارتباط سریال رو کانفیگ کنیم. دستوری که باهاش این کار رو انجام میدیم Serial.begin هست. خب از اسم دستور معلومه یعنی کامپیوتر عزیز ارتباط سریال رو شروع کن. این دستور یه آرگومان عددی داره که بیانگر Baude Rate مربوط به ارتباط سریال هست مثلا 9600. بنابراین برای کانفیگ کردن ارتباط سریال بین آردوینو و کامپیوتر از دستور (Serial.begin(9600 استفاده می کنیم. حالا این دستور کجا باید نوشته بشه؟ توی setup یا loop ؟ این سوال رو خودتون باید بتونید جواب بدید. به خاطر این که داریم کانفیگ می کنیم و تنها یک بار لازمه این تنظیم رو انجام بدیم این دستور توی تابع setup نوشته میشه.
قدم بعد (قدم آخر) باید یه دستور بنویسیم که اسممون رو توی کنسول چاپ کنه. از دستور Serial.print یا Serial.println استفاده میکنیم. دستور Serial.print هر چیزی که به عنوان آرگومانش بهش داده بشه پشت سر هم چاپ می کنه میره. اما دستور Serial.println بعد از چاپ آرگومانش میره خط بعدی. این دستورها تنها یه آرگومان به عنون ورودی میگیرن که باید حتما توی علامت دبل کوتیشن نوشته بشه مثلا (“Serial.println(“aftab . حالا من میخوام هر بار که قراره اسمم چاپ بشه بره تو یه خط جدید اجرا بشه بنابراین از دستور Serial.println استفاده میکنم. خب بازم سوالی که پیش میاد اینه که دستور Serial.println کجا نوشته بشه؟ setup یا loop ؟ این دفعه بزارین هر دو مورد رو امتحان کنیم تا فرقشو کامل متوجه بشید. اول دستور رو میزاریم تو تابع loop. کد رو اپلود میکنیم.
خروجی توی کنسول آردوینو به اینصورت میشه(نترسید):
همونطور که قبلا هم در موردش حرف زدیم دستوراتی که توی تابع loop نوشته میشن تا زمان ابد تکرار میشن و ادامه دارن.
حالا دستور رو توی تابع setup می نویسیم و آپلود می کنیم:
و خروجی کنسول:
می بینید که تنها و تنها یک بار چاپ میشه و تا هزار سال دیگه هم که بشینید هیچ خبری نمیشه. فکر کنم الان کاملا با تفاوت تابع setup و loop آشنا شده باشید.
حالا اگه خواستیم با فاصله زمانی یک ثانیه اسممون رو چاپ کنیم چطوری کد بنویسیم؟
خب بدون شک میریم تو تابع loop ، دستورچاپ رو مینویسیم فقط یه تاخیر 1 ثانیه ای بینش قرار میدیم . با این کد نویسی اول تابع Serial.println اجرا میشه و روی کنسول نمایش داده میشه بعد به مدت 1 ثانیه روی همون دستور می ایسته و دوباره بر میگرده به اول تابع loop و تکرار روند.
پایان جلسه
مرسی فوق العاده عالی با آرزوی موفقیت برای شما.
با درود بشما اقا محمد حسن دست شما درد نکنه نوشتارشما بسیار مفید بود ولی اینجا یک سئوال برای من پیش امده و اونم ورش نوشتاری شماست میشه بفرمائید که وازه اصن رو از کدام واژه نگار پیداکردید و ازش در یک جایگاه همگانی سود میبرید !!!!!! ؟؟؟؟؟؟
درصورتیکه جواب و دلیل درستی باشه من حرفم رو پس میگیرم !!!
دوست عزیز.
این بلاگ هدفش آموزش همراه با سرگرمی است. اگر لذت نمی برید از این متن ها متاسفم چون روش کار این بلاگ دقیقا همینه. اصن شاید خودش بعدا یه کتاب لغت بشه
اتفاقا به نظر من خيلي هم خزبه اين نوع نوشتار . اينطوري آدم بيشتر با آموزش ها همراه ميشه .
واقعا جاي احسنت گفتن به شما وجود داره چون من خودم تجربه كردم آموزش دادن به ديگران خيلي حوصله ميخواد واقعا ممنون.
خزبه = خوبه
مچکرم
خیلی عالی. مرسی.
واقعا عالی توضیح دادید
متشکرم
سلام
خسته نباشید
من اینها رو نوشتن و موقعی که وریفای رو میزنم اروری نمیگیره ولی وقتی میخوام برم و ببینم که چجور خروجی میده و سریال مانیتور رو میزنم پایین ارور میده با این عنوان که “board at COM1 is not available”
چرا اینجوریه کجای کارم میلنگه؟
دوست من پورت کام ای که انتخاب کردید غلطه
شما بیییینظریییید ممنونم از اموزشهای فوق العدتووون
سلام
همین کد ساده رو میزنم و verify هم میشه ولی وقتی سریال مانیتور رو میزنم error زیر رو میاره
Error opening serial port ‘COM3’. (Port busy)
لطفا راهنمایی کنید
بسیار ارزنده و عملی بود.مرسی.
برای اینکه نوشته ها تکرار نشهclear() را به خط اول برنامه اضافه کردم, باخطای خوشگل زیر مواجه شدم….
Arduino: 1.8.1 (Windows 7), Board: “Arduino/Genuino Uno”
F:\Arduino\Prog\konsol30.09\konsol30.09.ino: In function ‘void loop()’:
konsol30.09:9: error: ‘clear’ was not declared in this scope
clear();
^
exit status 1
‘clear’ was not declared in this scope
به من عاجز کمک کنید. مرسی.
خیلی ممنون از اطلاعات
اما من ارور
Hard resetting via pin…
رو دارم چیکار کنم؟
سلام ممنون از اطلاعاتتون لطفا کمکم کنین
من ارور
Hard resetting RTD pin…
رو میگیرم همش