Dariush Tasdighi - داریوش تصدیقی
Dariush Tasdighi - داریوش تصدیقی
خواندن ۸ دقیقه·۲ سال پیش

آموزش جامع برد Arduino Uno - قسمت چهارم!

توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.
با کمال تشکر
داریوش تصدیقی
کلیه اطلاعات تماس: https://DTAT.ir
نسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۴۰۱/۰۳/۲۳

با سلام و احترام خدمت دوستان عزیزم، اول این‌که چرا از قسمت چهارم شروع کردم! چون علاقه خاصی به مجموعه فیلم‌های Star Wars دارم، و اگر در جریان تولید و پخش این مجموعه فیلم‌ها باشید، خواهید فهمید که اولین قسمت این مجموعه با شماره چهار آغاز گردید! و بعدها (سی سال بعد) سه قسمت اول تولید شدند! به هر حال چون راه‌اندازی و اتصالات اولیه این Board به سه جلسه نیاز دارد، نوشتن مقاله در این خصوص را فعلا به بعد موکول کردم (البته نه به سی‌سال دیگر :-) ) و از این جلسه می‌خواهم برنامه‌نویسی بر روی این Board را آموزش دهم.

آموزش برنامه‌نویسی بر روی برد Arduino Uno و یا Arduino Nano (قسمت اول)

پیش‌نیاز این دوره

آشنایی با مفاهیم اولیه برنامه‌نویسی و الگوریتم و فلوچارت

دانلود کامپایلر و محیط برنامه‌نویسی Arduino IDE

وارد نشانی ذیل شده و آخرین نسخه فایل Setup آن‌را دانلود و نصب می‌کنیم:

https://www.arduino.cc/en/software

نکات جالب

  • نسخه قدیمی این محیط، نسخه ۱.۸.۱۹ بود که با یک انقلابی، متحول شد و نسخه ۲ نسخه پیشنهادی و مناسب می‌باشد.
  • این محیط کاملا سورس‌باز (Open Source) می‌باشد و می‌توانیم سورس‌کد این محیط را از نشانی ذیل دانلود و مشاهده نماییم:

https://github.com/arduino/arduino-ide

  • می‌توانیم به صورت آنلاین، کدنویسی کنیم و در مرحله اول، و خصوصا برای یادگیری، شاید نیازی به دانلود و نصب این محیط نباشد! خصوصا می‌توانیم آموزش‌ها را مطالعه کرده و عملیات شبیه‌سازی Board را با استفاده از محیط‌های قابل برنامه‌نویسی و شبیه‌ساز انجام داده و در صورتی که موضوع برای ما جذاب و هیجان‌انگیز بود، نسبت به خرید Board و دانلود و نصب محیط Arduino IDE اقدام نماییم:

https://create.arduino.cc/editor

  • سایت فوق‌العاده دیگری که مشابه این امکانات را به ما می‌دهد:

https://www.tinkercad.com

وارد برنامه Arduino IDE می‌شویم و پس از اتصال Arduino Uno Board به دستگاه، اقدام به برنامه‌نویسی می‌کینم. در مقاله دیگری، نکاتی که در خصوص اتصال و راه‌اندازی اولیه وجود دارد به شما عزیزان آموزش داده می‌شود.

نکاتی که در خصوص این زبان برنامه‌نویسی باید بدانیم

  • زبان برنامه‌نیسی، زبان C یا ++C می‌باشد.
  • این زبان، یک زبان Case Sensitive می‌باشد و حروف بزرگ و کوچک برای آن اهمیت دارد.
  • در انتهای اکثر (نه همه!) دستورات باید یک Semicolon (;) قرار دهیم.

در ابتدای کار، با دو تابع مواجه می‌شویم، به نام‌های setup و loop. حضور و وجود این دو تابع بسیار مهم می‌باشد! و ما نمی‌توانیم حتی یکی از آن‌ها را (حتی اگر به آن، نیازی نداریم) حذف کرده و یا نام آن‌ها را تغییر دهیم.

تابع Setup برای پیکربندی اولیه می‌باشد، مثلا در داخل این تابع اعلام می‌کنیم که می‌خواهیم پین (PIN) شماره ۴، به عنوان ورودی یا خروجی در نظر گرفته شود.

تابع Loop، برای نوشتن اصل فعل و انفعالاتی است که می‌خواهیم به صورت نامحدود انجام شده و تکرار شوند، مثلا می‌خواهیم از لحظه‌ای که دستگاه روشن می‌شود، LED (چراغ) روی Board در فاصله زمانی یک ثانیه یک‌بار روشن و خاموش شود.

نکته: هرگاه در حین آموزش با کلمه [الکترونیک] مواجه شدید، این بدان معنا است که باید در آن خصوص، کمی دانش مبانی الکترونیک داشته باشید و سپس اقدام نمایید. در طی این سری مقالات به مرور این موضوعات را نیز به صورت مقالات جداگانه‌ای منتشر خواهم کرد و لینک مورد نظر را به روز رسانی خواهم نمود.

نکته: از آنجایی که این دوره (انشاءالله) به صورت یک دوره مجازی و به همراه فیلم آموزشی خواهد بود، شاید توضیحات خیلی مبسوطی در هنگام نوشتن سورس‌کد‌ها گفته نشود و صرفا کد مذکور نوشته شده و نکات آموزشی آن در فیلم‌های آموزشی به طور کامل گفته خواهند شد:

سورس‌کد شماره یک

void setup ( ) { } void loop ( ) { }

کد فوق در کمال شلختگی نوشته شده است! لذا باید همیشه عادت کنیم، ضمن این‌که از حداقل اصول نگارش در سورس‌کدها استفاده نماییم، هر از گاهی از دکمه‌های ترکیبی CTRL+T استفاده نماییم تا محیط IDE، سورس‌کد ما را مرتب نماید.

نکته: با تجربه ۳۳ ساله در حوزه برنامه‌نویسی و با داشتن بیش از ۱۶ هزار دانش‌پژوه، تجربه به اینجانب ثابت کرده است که شخصی که دراز مدت، به شکل شلخته فوق، برنامه‌نویسی می‌کند، یا به سرانجام نخواهد رسید و یا افراد و شرکت‌هایی که با وی کار خواهند کرد را به شدت دچار چالش می‌کند!

سورس‌کد شماره دو

void setup() { } void loop() { }

بر خلاف زبان‌های برنامه‌نویسی، مانند زبان C, C++, C#, Java و غیره، در این محیط، دیسیپلین [تاکتیک] نوشتن کد به گونه‌ای است که توصیه می‌شود که آکولاد باز، در مقابل دستور نوشته شود و نه در ذیل آن:

سورس‌کد شماره سه

void setup() { } void loop() { }

نکته:‌ نوشتن دستورات به شکل فوق، مطلقا غلط نمی‌باشد!

نکته: در طی این دوره، وقتی از کلمه تاکتیک استفاده می‌کنم، این بدان معنا است که عدم رعایت آن، هیچ‌گونه مشکلی در سورس‌کد برنامه و یا اجرای آن ایجاد نمی‌کند! بلکه اگر رعایت نکنیم و یک شخص باتجربه و حرفه‌ای سورس‌کد ما را ملاحظه کند، ممکن است که توی ذوق وی خورده! و از تجربه و تخصص ما مایوس شود! پس تقاضا می‌کنم که به تاکتیک‌هایی که عنوان می‌شود، برای بالا بردن پرستیژ و پرنسیو تخصصی و شخصی خود دقت نمایید!

بر روی Arduino Uno Board یک LED (چراغ) وجود دارد که معمولا در ابتدا می‌خواهیم کنترل روشن و خاموش شدن آن‌را برعهده بگیریم.

بر روی Arduino Uno Board یک تعداد مربع‌های سیاه‌رنگ سوراخ‌دار در لبه‌های آن قرار دارند، که به آن‌ها اصطلاحا PIN گفته می‌شود.

ما م‌توانیم برای هر PIN ای که می‌خواهیم با آن کار کنیم، اعلام نماییم که می‌خواهیم به آن سیگنال ارسال کنیم (OUTPUT) و یا از آن سیگنال دریافت کنیم (INPUT).

مثلا اگر بخواهیم به یک LED دستور بدهیم که روشن شود و یا خاموش شود، در واقع به آن سیگنال ارسال می‌کنیم، پس پایه‌ای (PIN) که به آن LED متصل شده است، باید به عنوان پایه خروجی (OUTPUT) تعریف شود.

یا مثلا اگر بخواهیم در مدار خود یک دکمه (Button) قرار داده و زمانی که کاربر بر روی آن فشار می‌دهد، متوجه شده و اقدامی انجام دهیم، در این حالت پایه‌ای که دکمه را به آن متصل کرده‌ایم، به ما سیگنال ورود (INPUT) ارسال می‌کند و باید در قسمت پیکربندی (تابع setup)، آن‌را به عنوان پایه ورودی تعریف نماییم.

چراغ (LED) موجود روی Board، به صورت پیش‌فرض، روی پایه ۱۳ نصب شده است. لذا در قسمت پیکربندی، ابتدا این موضوع را به Board اعلام می‌کنیم.

سپس سیگنال یک (High) را به این پایه ارسال می‌کنیم، تا اصطلاحا این LED روشن شود:

سورس‌کد شماره چهار

void setup() { pinMode(13, OUTPUT); digitalWrite(13, 1); } void loop() { }

یک‌بار بر روی دکمه Verify که به شکل یک تیک می‌باشد (در Toolbar) کلیک می‌کنیم که از سالم بودن سورس‌کد خود اطمینان حاصل کنیم.

سپس بر روی دکمه Upload که به شکل یک فلش به سمت راست می‌باشد (در کنار دکمه Verify)، کلیک می‌کنیم، تا دستورات ما به Board، آپلود شده و اجرا شود. پس از اجرای این دستور خواهید دید که LED موجود بر روی Board روشن می‌شود.

حال می‌خواهیم این LED را خاموش کنیم، مجددا روال قبل را انجام داده و این‌بار سورس‌کد را به شکل ذیل تغییر می‌دهیم:

سورس‌کد شماره پنج

void setup() { pinMode(13, OUTPUT); digitalWrite(13, 0); } void loop() { }

خواهیم دید که این‌بار، پس از اجرای برنامه، چراغ LED، خاموش می‌شود، و البته خاموش می‌ماند.

تابع (Function) pinMode دو پارامتر دریافت می‌کند. پارامتر اول، شماره پنن می‌باشد و پارامتر دوم، ورودی یا خروجی بودن آن‌را اعلام می‌کند.

تابع digitalWrite نیز دو پارامتر دریافت می‌کند. پارامتر اول، شماره پین بوده و پارامتر دوم ارسال سیگنال صفر و یک (HIGH, LOW) یا به طور خلاصه روشن، خاموش را به پین مذکور ارسال می‌کند.

نکته: ما دستوری به نام analogWrite نیز داریم که در جای خود آموزش داده می‌شود.

همان‌طور که در دستورات فوق ملاحظه می‌کنید، عدد ۱۳ و اعداد صفر و یک، چندان حس خوبی به ما نمی‌دهد و خوانایی سورس‌کد ما خیلی بالا نیست! و برای شخصی که می‌خواهد این سورس‌کد را ملاحظه کرده و متوجه شود، یا حتی خودمان، آن‌هم وقتی چندین ماه از نوشتن این سورس‌کد گذشته باشد، درک و فهم این سورس‌کد در دراز مدت، چندان کار ساده‌ای نمی‌باشد. برای این منظور می‌توانیم از متغیرهایی (در واقع ثابت‌هایی) استفاده کنیم که به صورت Built In (از پیش تعریف شده) در این محیط تعریف شده‌اند. مثلا به جای عدد ۱۳، می‌توانیم از کلمه LED_BUILTIN استفاده نماییم، و به جای استفاده از صفر (0) و یک (1)، از کلمات LOW و HIGH استفاده نماییم:

سورس‌کد شماره شش

void setup() { pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); } void loop() { }

همان‌گونه که ملاحظه می‌کنید، سورس‌کد ما دقیقا همان کار قبلی را انجام می‌دهد، ولی سورس‌کد از خوانایی مناسب‌تری برخوردار شده است. این دقیقا همان تاکتیک یا تاکتیک حرفه‌ای‌گری است!

تشکر و تقدیر

  • با تشکر از امیر بادامچی عزیز، بابت ویرایش علمی و متنی این مقاله

پایان

برنامه نویسیزبان carduino
محقق، معمار، مشاور، مدرس و برنامه‌نویس حوزه فن‌آوری اطلاعات - تحلیل‌گر و فعال بازار بورس و سرمایه
شاید از این پست‌ها خوشتان بیاید