شروع کار با برنامه نویسی آردوینو

سلام دوستان، امیدواریم حالتون خوب باشه. امروز قصد داریم یک مقاله آموزشی را در خصوص شروع برنامه نویسی آردوینو با شما به اشتراک بگذاریم. در یکی از آموزش ها با عنوان «شروع کار با نرم افزار آردوینو»، اصول اولیه کار با نرم افزار آردوینو  و همچنین نحوه نصب و اجرای این نرم افزار را به تفصیل توضیح دادیم. 

این مقاله هم راجع به نرم افزار آردوینو است با این تفاوت که در مقاله قبلی نحوه استفاده از نرم افزار آردوینو را یاد گرفتیم، و اینکه عملکرد این نرم افزار چگونه است و کد برنامه را کجا بنویسیم و بعد از نوشتن طرح، چگونه اشکال زدایی کنیم اما اکنون در این مقاله راجع به "شروع با برنامه نویسی آردوینو" صحبت می کنیم، در اینجا خواهیم دید که چگونه یک کد در نرم افزار آردوینو نوشته می شود؟ عملکردهای داخلی نرم افزار آردوینو چیست؟ کامنت ها چگونه در برنامه نوشته می شود؟ حلقه های اصلی مورد استفاده در برنامه نویسی آردوینو کدامند؟ انتخاب پایه های سخت افزاری در نرم افزار آردوینو چگونه انجام می شود؟ پایه های دیجیتالی که روی برد آردوینو تعبیه شده اند چگونه کنترل می شوند؟ برای توضیح کامل این نرم افزار، این آموزش را به قسمت های اصلی و همچنین قسمت های فرعی تقسیم کرده ایم. همچنین برای اطلاعات بیشتر می توانید به مقاله «آردوینو در مقابل رزبری پای» و مقاله « نحوه دریافت فایل Hex از آردوینو» یک سری بزنید.

1- نحوه کامنت گذاشتن در برنامه نویسی آردوینو

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

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

توجه داشته باشید:

برای مبتدیان فایلی که به عنوان چشمک زن Blink نامگذاری شده بسیار مفید است، بنابراین ما هم از همیین آموزش مقدماتی به شما آموزش خواهیم داد.

هنگامی که بر روی گزینه "blink" کلیک کنید، پنجره جدیدی باز می شود که در تصویر زیر نشان داده شده است:

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

اکنون در این مثال توضیح خواهیم داد که چگونه در برنامه نویسی آردوینو کامنت بنویسید؟

کامنت در واقع نوشته ای برای نوشتن نظر در برنامه است. کد بالا در سطح بسیار ابتدایی است و نحوه چشمک زدن یک led را با استفاده از برد آردوینو شرح می دهد.

اگر به تصویر بالا دقت کنید، می بینید که در ابتدای برنامه چند کلمه نوشته شده است و این کلمات در این علائم " /* ..........*/" محصور شده اند.

توجه: کامنت ها هیچ قانونی در رنامه ندارند، و همچنین لازم نیست در هر برنامه ای نوشته شوند. ما فقط آنها را به کد اضافه می کنیم تا کد کاربر پسند باشد یا اینکه کاربر بفهمد که واقعاً در کد چه اتفاقی می افتد.

یک راه دیگر برای اضافه کردن نظرات این است که قبل از هر خط در برنامه خود، " ...........//" را بنویسید.

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

تفاوتی بین این دو روش کامنت نویسی وجود دارد.

روش اول در جایی استفاده می شود که باید 3 یا 4 خط را با هم کامنت گذاری کنیم یا یک پاراگراف بزرگ در برنامه را به عنوان کامنت بی تاثیر کنیم تا کاربر بتواند برنامه را بفهمد. ما تک تک خطوط مورد نیاز را به صورت کامنت در نمی آوریم. بنابراین، این روش کامنت گذاری راحتر چند خط با هم را کامنت می کند.

در حالی که تکنیک دوم در جایی استفاده می شود که باید کامنت گذاری فقط در در یک خط ارائه شود.

هر دو این تکنیک ها اهداف خاص خود را دارند و در جایی مودنظر استفاده می شوند.

2- حلقه های اصلی در برنامه نویسی آردوینو

اکنون قدم بعدی در یادگیری برنامه نویسی آردوینو، آشنایی با حلقه های اصلی است که در برنامه نویسی آردوینو استفاده می شود.

برای دیدن حلقه های اصلی کافی است به منوی فایل رفته و بر روی دکمه new کلیک کنید و یک پنجره جدید باز می شود که در تصویر زیر نشان داده شده است:

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

حلقه اول "void setup" و حلقه دوم "void loop" است.

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

Void setup اولین و حلقه اصلی در هنگام برنامه نویسی در آردوینو است که برای مقداردهی اولیه و برای پیکربندی مقادیر ثابت استفاده می شود.

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

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

حلقه اصلی دیگری که هنگام استفاده از برنامه نویسی در آردوینو استفاده می شود "loop void" است، که می توانید آن را از تصویر داده شده بالا نیز مشاهده کنید.

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

کامپایلر از بالا به پایین حرکت می کند و در مرحله اول، تمام خط های " ()void setup" را می خواند و سپس به " ()void loop" می آید و هر خط نوشته شده در این قسمت را می خواند و کامپایل می کند.

نکته: نکته مهمی که در اینجا باید به خاطر بسپارید این است که کامپایلر حلقه ()void setup را تنها یک بار می خواند و از سوی دیگر حلقه دوم را که به عنوان ()void loop بارها و بارها می خواند.

بنابراین از اطلاعات داده شده در بالا، می توانیم نتیجه بگیریم که ()void loop شبیه حلقه "while(1)" است که در واقع یک حلقه بی نهایت است.

3- انتخاب حالت پایه در برنامه نویسی آردوینو

در دو قسمت بالا از این آموزش ، نحوه کامنت گذاری در حین انجام برنامه نویسی در نرم افزار آردوینو و همچنین نحوه نوشتن  حلقه های اصلی مورد استفاده در برنامه نویسی آردوینو را دیدیم.

حال به مرحله سوم یعنی انتخاب حالت پایه یعنی Pin Mode در برنامه نویسی آردوینو می رویم.

اگر از برنامه نویسی میکروکنترلرهای دیگر مانند سری ATmel، PIC یا AVR مطلع هستید، ممکن است بدانید که پیکربندی پین این میکروکنترلرها ثابت است.

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

به عنوان مثال اگر یک میکرو کنترلر دارای یک پورت ورودی باشد، تمام پین های آن پورت برای دریافت داده استفاده می شود و شما نمی توانید از آنها برای ارسال داده استفاده کنید.

در حین کار با میکرو کنترلر آردوینو این انعطاف پذیری به ما می دهد که هر پایه ورودی/خروجی موجود بر روی برد (به جز برخی از پایه های مشخص مانند VCC، GND و غیره) می تواند به عنوان پایه ورودی یا خروجی استفاده شود.

به عنوان مثال اگر بخواهیم یک led را در پایه شماره 2 برد آردوینو وصل کنیم، به این معنی که این پایه شماره 2 را به عنوان پایه خروجی ایجاد کرده ایم.

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

دستور نوشتن برای انجام این تابع عبارت است از:

pinMode (2 , OUTPUT)

با نوشتن این دستور در کد، پین شماره 2 را به عنوان پایه خروجی در نظر گرفته ایم.

و اگر سنسور خاصی را در این پورت وصل کنیم و باید مقدار آن سنسور را به عنوان ورودی در نظر بگیریم، باید پین شماره 2 را به عنوان پایه ورودی تعریف کنیم.

برای تعریف همان پین به عنوان پین ورودی، باید دستور را به صورت زیر بنویسیم:

pinMode (2 , INPUT)

با نوشتن این دستور، برد آردوینو به طور خودکار پین شماره 2 را به عنوان پایه خروجی تعریف می کنیم.

شرایط Pull-up نیز در نوشتن هر دستوری برای برد آردوینو بسیار مهم است. منظور از pull up کردن یک پایه بالاکشیدن آن پایه به وضعیت HIGH یعنی +5v است.

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

برای غلبه بر این مشکل باید حتماً مقدار خاصی را برای هر پین تعیین کنیم. و ما باید حالت هر پین را تعریف کنیم که HIGH یا LOW باشد.

وضعیت LOW به معنی این است که GND به آن پایه متصل است و وضعیت HIGH به آن معناست که +5v به آن پایه ارسال می کنیم تا آن پایه در یک موقعیت HIGH بماند.

دستور برد آردوینو برای pull-up به صورت زیر است:

;pinMode(2 , INPUT_PULLUP)

 این دستور به طور خودکار یک مقاومت 10 کیلواهمی که از داخل یک سرش به +5 وصل است را به پایه آردوینو متصل می کند و بنابراین در حالتعادی این پایه دارای وضعیتHIGH است.

4- کنترل پین های دیجیتال در برنامه نویسی آردوینو

اکنون نحوه کنترل پین های دیجیتال هنگام کدنویسی در آردوینو را بررسی می کنیم.

برد آردوینو یک میکرو کنترلر چند منظوره است که قادر به ارسال و دریافت اطلاعات از داده های دیجیتال و آنالوگ است.

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

پین های دیجیتال I/P:

به عنوان مثال، فرض کنید می خواهیم پین شماره 2 خود را به عنوان یک پایه ورودی دیجیتال تعریف کنیم، به این معنی که داده‌های دیجیتال را از یک منبع خارجی بخواند.

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

;digitalRead(2); boolean sensor=digitalRead(2)

 اولین دستور به کامپایلر آردوینو می‌گوید که پین شماره ۲ را به عنوان پین دیجیتال تعریف کن و کامپایلر داده‌های ورودی دیجیتال را از آن پین بگیرد.

در حالی که دومین دستوری که نوشته ایم به معنای این است که مقدار باینری پین خوانده شده را در یک متغیر بولین ذخیره می کنیم.

همانطور که ملاحظه شد نوع متغیر را Boolean در نظر گرفتیم که می توانیم آن را تغییر دهیم. همچنین نام متغیر را sensor تعریف کردیم که می توان آن را به دلخواه تغییر داد و نام دیگری به آن اختصاص داد.

پین های دیجیتال O/P:

در مرحله بعد اگر می خواهید این پین ها را به عنوان پایه های خروجی تعریف کنید، نیز می توانیم این کار را انجام دهیم.

حالا فرض کنید می خواهید پین شماره 2 خود را به عنوان پایه خروجی تعریف کنید و می خواهید داده ها را به این پین ارسال کنید یا می خواهید حالت این پین را تعریف کنید، دستوراتی که می نویسید عبارتند از:

;digitalWrite(2,HIGH); digitalWrite(2,LOW)

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

دستور اول نشان می دهد که ما در حال نوشتن داده های دیجیتالی روی پین شماره 2 خود هستیم و آن را در حالت HIGH/ON قرار می دهیم.

دستور دوم نشان می دهد که ما قرار است پین شماره 2 را در حالت OFF یعنی خاموش قرار دهیم.

5- کنترل پین های آنالوگ در برنامه نویسی آردوینو

پین های آنالوگ I/P:

همانطور که در بالا به تفصیل توضیح دادیم، با استفاده از پین های آردوینو به صورت دیجیتالی داده ها را ارسال و دریافت می کنیم.

یکی از ویژگی های جالب این است که از پین های برد آردوینو می توان برای ارسال یا دریافت اطلاعات به صورت آنالوگ نیز استفاده کرد.

فرض کنید که می خواهید مقداری ولتاژ آنالوگ را از پایه شماره 2 برد آردوینو بخوانید. برای انجام این کار، دستوراتی که در نرم افزار آردوینو خواهید نوشت به شرح زیر است:

;analogRead(2); int sensor Value = analogRead(2)

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

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

در دستور بعدی داده های خوانده شده را در متغیری به نام "sensor Value" ذخیره کرده ایم.

پس از آن تمام داده های آنالوگ که در پین شماره 2 ظاهر می شوند در " sensor Value" ذخیره می شوند.

پین های آنالوگ O/P:

حال اگر بخواهیم از پین های برد آردوینو به عنوان پایه خروجی استفاده کنیم، این کار نیز بسیار آسان است و همچنین می توانید با انجام چند مرحله ساده این کار را انجام دهید.

اگر می‌خواهید از هر پینی برای نوشتن داده استفاده کنید یا می‌توانیم بگوییم که می‌خواهید یک سوئیچ را روشن یا خاموش کنید، سینتکس به صورت زیر خواهد بود:

;analogWrite (3,HIGH); analogWrite (3,LOW)

 اولی نشان می دهد که یک سوئیچ در پین شماره 3 وصل شده است و می خواهید آن را روشن کنید و اولین دستور را در برنامه آردوینو می نویسید.

دستور دوم نشان می دهد که یک سوئیچ در حال حاضر در حالت ON است که در پین شماره 3 وصل شده است و ما می خواهیم آن را خاموش کنیم سپس فرمان دوم را در برنامه آردوینو خود می نویسیم.