جلسه پنجم دوره آردوینو- بررسی دستورات آردوینو
مقدمه
دوستان سلام. در این جلسه میخوایم دستورات آردوینو رو با همدیگه بررسی کنیم ولی قبلش لازمه یه سری مفاهیم گفته بشه. مثل همیشه مستقیم میریم سر اصل مطلب.
مفهوم تابع در برنامه نویسی
یه بار دیگه کدی که در جلسه قبل نوشتیم رو یه نگاه کنید( همون عکسه از نرم افزار). یه براکت هایی ( منظور از براکت علامت {} هست) وجود داره که نشون میده یه سری خطوط کد با هم استفاده میشه و در واقع با هم یه کار رو انجام میدن.فرض کنید سر میز شام هستید و میخواد مثلا به برادرتون بگید اون پنیر پگاه رو بده من. این یه جمله در واقع یه سری دستورالعمل هست که شما به برادرتون میگید و فقط توی یه جمله خلاصه شده. یعنی برادرتون اول باید پنیر رو پیدا کنه. بعد با دستش برداره بعد بده شما که کلا همه این کلمات در یک جمله”پنیر پگاه رو بده من “خلاصه شده. برای ما انسان های این جمله کاملا مشخص هست و هیچ مشکلی باهاش نداریم ولی میکروکنترلر به اندازه مغز ما قدرتمند نیست و باید تک تک کارها و دستوراتی که میخواید انجام بدید رو بهش بگید. بنابراین برای یه سری دستورالعمل ها که با هم یه کار خاص رو میکنن قبلش از } و بعدش از { استفاده میکنیم. این مجموعه دستور العمل ها رو مثل یه بلوک در نظر بگیرید.
همونطور که در کد می بینید دو تا بلوک با روش گفته شده در بالا وجود داره. در همه کدهایی که با آردوینو نوشته میشه یه بلوک وجود داره که با دستور زیر شروع میشه:
voidsetup()
این یه اسم هست برای بلوکی که میخواد اون کارها رو انجام بده. البته این بلوک همیشه در آردوینو ثابت هست ولی اگه میخواید خودتون یه بلوک بسازید به همین شکل میتونید اسم دلخواه خودتون رو روش بذارید. مثلا اگه میخواد در یک بلوک کدهای چشمک زدن LED انجام بشه اسم اون بلوک رو میتویند بذارید cheshmakzan() هیچ اشکالی هم نداره. هیچ کسی هم گیر نمیده. اتفاقا برنامه ای که نوشتید هم خواناتر میشه. هر وقت هم که در کد اصلی برنامه تون از این اسم استفاده کردید، برنامه وارد خطوط این بلوک میشه و دستورات مربوط به اون رو اجرا میکنه. در دنیای برنامه نویسی به این بلوک ها میگن تابع. در برنامه اصلی هر وقت اسم این تابع رو نوشتید ( یا به اصطلاح برنامه نویس ها فراخوانی کردید یا صدا زدید) خطوط موجود در این تابع اجرا میشه.
در آردوینو حتما دو تا تابع وجود داره. یه تابع که اسمش رو گفتیم هست setup و یه تابع دیگه هم اسمش هست loop . تابع setup وقتی استفاده میشه که بخواید یه سری کد رو فقط یه بار اجرا کنید و معمولا هم در ابتدای برنامه اجرا میشه. تابع Loop هسته اصلی برنامه هست و برای مواقعی هست که میخواید کد شما همیشه اجرا بشه.
آردوینو مثل کامپیوتر هایی که ما استفاده میکنیم نیست که بخواد چندین کار رو با هم دیگه با هم انجام بده. آردوینو فقط یه کد رو در هر لحظه میتونه اجرا کنه. وقتی که برد رو روشن میکنید اون کد اجرا میشه و وقتی که برد رو خاموش میکنید اون کد دیگه اجرا نمیشه.
نوشتن کامنت در آردوینو
اول یه توضیح بدیم که کامنت چیه. کامنت هیچ وقت اجرا نمیشه و در واقع یه سری توضیحات هستند که اگه چند وقت دیگه خودتون اومدید کدتون رو بخونید بفهمید چی نوشتید. چون ممکنه بعد از یه مدت خودتون هم کدتون رو یادتون بره. یه جور مثل خلاصه برداری برای درس هاست که اصل مطلب رو یادم آدم میندازه. در ضمن اگه کسی هم بخواد برنامه شما رو بخونه راحتتر میفهمه در واقع با نوشتن کامنت خوانایی برنامه شام میره بالاتر. مثلا فرض کنید یه جا یه دستور نوشتید delay(1000) این دستور یعنی برنامه یه ثانیه توقف میکنه. حالا شما میایید و جلو این کامنت میذارید “dar in khat barnameh 1 sanieh tavaghof mikonad” ( به فارسی این خط رو بخویند.) . البته این یه مثال ساده هست و معمولا کسی برای این خط ها کامنت نمیذاره.
در آردوینو برای این که یه کامنت بنویسیم قبلش از علامت “//” استفاده میکنیم. همونطور که گفتیم این دستورات اصلا اجرا نمیشن و فقط برای خوانایی بیشتر برنامه به کار میرن. خیلی وقتا پیش اومده که یه قطعه کد بنویسم و بعد از چند ماه اصلا یادم نبود این قطعه کد چیه و از کجا اومده. چون کامنت نذاشتم. پس حتما سعی کنید از کامنت استفاده کنید.
توضیح کدهای برنامه LED چشمک زن
اول حتما این رو جلو خودتون بذارید و مطابق با متنی که میخونید به کدها هم نگاه کنید. حالا یا از نرم افزار آردوینو کد رو باز کنید و یا عکس کد رو که در جلسات قبل گذاشته شد ببینید.
خیلی از خط هایی که نوشته شده کامنت هست و برای توضیحات بیشتر اومده. پس اصلا از این کد نترسید.
این خط طبق توضیحات گفته شده یه کامنت هست و فقط داره میگه که این مثال، مثال 01 و مربوط به LED چشمک زن هست.
Const int LED یعنی این که پارامتر LED یه مقدار ثابت داره و نمیتونه تغییر میکنه. این مقدار برابر 13 هست و از این به بعد هر جا در برنامه ما از LED استفاده کردیم در واقع از عدد 13 استفاده کردیم. حالا این چه فایده ای داره. فرض کنید ما از عدد 13 بخوایم 100 بار در برنامه مون استفاده کنیم. بعد یهو بفهمیم یه جا اشتباه کردیم و باید از عدد 10 استفاده میکردیم. در این صورت باید بریم و هر 100 عدد 13 رو که نوشتیم به 100 تغییر بدیم که این خیلی کار طاقت فرسایی هست. ولی موقعی یه پارامتری به نام LED که مقدارش ثابت هست تعریف میکنید و مقدار اون رو برابر 13 قرار میدید از این به بعد هر وقت تصمیم گرفتید میتونید به جای 13 از 10 استفاده کنید و نیازی نیست که در برنامه بگردید و تک تک اعداد رو جایگزین کنید.
این خط کد به ما میگه که وارد یه تابع جدید شدیم و با علامت } این دستورات شروع به اجرا شدن میکنن.
دیگه رسیدیم به دستورات جالب آردوینو. با دستور PinMode به آردوینو میگیم که یه پین یا پایه دیجیتال چطوری باید پیکربندی بشه. یه پایه برای میکروکنترلر مثل یه دروازه برای شهر هست که میتونه به صورت ورودی (INPUT) یا خروجی (OUPTU) پیکربندی بشه. در اینجا ما نیاز داریم تا این پایه رو به صورت خروجی پیکربندی کنیم. چرا؟ چون میخوایم به پایه خودمون مقدار یک رو اختصاص بدیم تا برامون یه LED روشن کنه. اگه میخواستیم اون به ما یه چیزی بده به صورت ورودی پیکربندی میشد ولی چون میخوایم ما بهش یه چیزی بدیم باید به صورت خروجی پیکربندی بشه. همونطور که میبینید داخل پرانتز LED نوشته شده که طبق صحبت های گفته شده یعنی عدد 13. در واقع با این دستور ما به برد آردوینو میگیم که پایه شماره 13 رو به صورت خروجی برای ما قرار بده.
در واقع در اینجا PinMode هم خودش یه تابع هست که داخلش دو تا پارامتر نوشته شده که به این پارامترها میگن آرگومان. پارامتر دوم میتونه به صورت INPUT یا OUTPUT قرار داده بشه که این INPUT و OUTPUT یه سری مقادیر ثابت هستند که آردوینو اونا رو میفهمه و باهاش یه پایه رو به صورت ورودی یا خروچی پیکربندی میکنه.
با نوشتن علامت { یعنی این بلوک کارش تموم شد.
رفتار اصلی برنامه در این تابع یا بلوک قرار داره. این تابع برای همیشه اجرا میشه مگه این که برد شما ریست یا خاموش بشه.
همونطور که کامنت نیز توضیح داده در دستور بالا یه مقدار 1 روی پایه قرار داده میشه. این تابع برای صفر و یک کردن و به عبارتی خاموش و روشن کردن یه پایه به کار میره و دو تا آرگومان داره. آرگومان اولش که همون شماره پایه هست که در اینجا نوشته LED که منظور از اون همون عدد 13 هست. پس هر کاری که این تابع انجام میده روی پایه 13 اتفاق میفته. آرگومان دوم هم HIGH هست که یعنی سطح منطقی 1 یا ولتاژ 5 ولت. پس این دستور مقدار 5 ولت رو روی پایه شماره 13 قرار میده. در این تابع میشه به جای HIGH از LOW هم استفاده کرد که در این صورت مقدار 0 ولت یا سطح منطقی 0 روی پایه قرار داده میشه.
هر پایه رو مثل یک پریز برق کوچک که در خونه شما قرار داره فرض کنید. ولتاژ این پریز برق برای اروپایی ها 230 ولت، برای آمریکایی ها 110 ولت، و برای آردوینو 5 ولت هست ( البته ولتاژهای دیگه ای هم وجود داره برای آردوینو که فعلا ما با اونا کاری نداریم.) نکته جالب این دستور این جاست که با نوشتن یه خط دستور نرم افزاری یه سخت افزار رو راه اندازی میکنید. شما به یه پایه میگید 1 بشه. بعد اون پایه 1 میشه و LED که بهش وصل هست هم به وسیله ی جریانی که از پایه میگذره روشن میشه. روشن و خاموش کردن LED در اینجا مثل یک عملگر هست که میتونه به ما چیزی رو نشون بده.
با استفاده از این دستور شما به پردازنده میگید که به مدت 1000 میلی ثانیه هیچ کاری نکن. یعنی به اندازه 1000 میلی ثانیه یا 1 ثانیه کاری نکن و بعد از اون برو و دستورات بعدی رو اجرا کن. این تابع یک آرگومان داره و اون آرگومان م برحسب میلی ثانیه هست که باهاش مقدار بیکار نشستن پردازنده رو بهش اطلاع میدید.
این دستور رو در بالا توضیح دادیم تنها فرقش اینه که اینجا به جای HIGH از LOW استفاده شده. این یعنی بر روی پایه شماره 13 مقدار صفر قرار داده میشه. حالا چرا این کار رو میکنیم؟ چون میخوایم LED ما چشمک بزنه و این اتفاق با روشن شدن و سپس خاموش شدن LED اتفاق میفته . که ما هم ابتدا LED رو روشن کردیم و سپس یه ثانیه روشن موند (delay مربوط به دستور قبل) حالا هم خاموش کردیم. پس اینطور میشه که LED چشمک میزنه.
این دستور هم مشابه دستور delay قبلی هست و دوباره پردازنده یک ثانیه بیکار میشینه.
با علامت { هم میگیم که کدهای این تابع به پایان رسیده. ولی چون این تابع از نوع Loop هست دوباره از اول میره و اجرا میشه.
خوب این کد کامل به پایان رسید. در زیر به طور خلاصه آوردیم که کلا این کد چیکار میکنه:
1- پایه 13 به عنوان خروجی تعریف میشه
2-وارد حلقه میشه
3- مقدار 1 منطقی یا همون 5 ولت رو روی پایه شماره 13 قرار میده و به عبارتی LED متصل به پایه شماره 13 رو روشن میکنه.
4- 1 ثانیه صبر میکنه.
5- مقدار 0 منطقی یا همون 0 ولت رو روی پایه شماره 13 قرار میده و به عبارتی LED متصل به پایه شماره 13 روخاموش میکنه.
6- برمیگرده به اول حلقه
خوب دوستان. این کد هم تموم. امیدوارم براتون خیلی فهمیدنش سخت نبوده باشه. در ادامه دوره مثال های بیشتری رو میزنیم و کدنویسی رو بهتر از همیشه یادمیگیریم.
حالا یه تمرین.( حتما این تمرینات رو انجام بدید چون باعث میشه مهارت کدنویسی شما بره بالاتر و در آینده کدهای بهتر و سنگین تری رو بنویسید)
اول این که با توضیحات جلسات قبل و این جلسه دیگه به طور کامل میتونید یه LED رو به صورت چشمک زن دربیارید. سعی کنید با این کد ور برید. مثلا مقدار delay رو کاهش بدید و ببینید چه اتفاقی میفته. شماره پایه مربوطه رو تغییر بدید و سعی کنید چشمک زدن LED رو با بقیه پایه ها هم ببینید. حالا زمان های delay رو برای مقدار روشن بودن و خاموش بودن به صورت جداگانه تغییر بدید و هر کدوم رو یه مقدار متفاوتی قرار بدید و نتیجه رو ببینید. این کار بعد در مبحث PWM که خواهیم خوند به شما کمک بسیار زیادی خواهد کرد.
خوب دوستان این جلسه هم به پایان رسید. مثل همیشه میتونید ما رو در تلگرام و یا اینستاگرام دنبال کنید.
اگه هم که خیلی عاشق ما هستید که ما رو به دوستاتون هم معرفی کنید. ممنون از همکاریتون 😉
5 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
من بردم رو ریست می کنم ولی برنامه پاک نمیشه از روش.مدل برد هم mega 2560 هست.لطفا راهنمایی کنید.
با سلام.
با ریست کردن برنامه پاک نمی شود. اگر برنامه ای جدید بر روی برد بریزید ، برنامه قبلی پاک می شود.
موفق باشید.
ممنون بسیار عالی
برای حرفه ای شدن و آشنایی با تمام دستورات چه نوع برنامه نویسی را باید پیگری کنیم ؟
با سلام. به طور کلی زبان C و C++ برای یادگیری و آشنایی با میکروکنترلرها ، زبان های کاملا مناسبی هستند. اما در بردهای قوی تر از زبان پایتون نیز استفاده می شود. لطفا توضیح دهید که میخواهید با چه بردی کار کنید تا توضیحات تکمیلی تر ارایه گردد.
با تشکر.
با سلام. برای شروع کار پیشنهاد ما استفاده از برد Arduino UNO هست.
موفق باشید.