آردوینو, توصیه شده

انواع داده‌های آردوینو در برنامه نویسی آردوینو | قسمت هفتم آموزش آردوینو

قسمت هفتم آردوینو

در قسمت ششم از آموزش آردوینو به روش اضافه کردن بردهایی که در IDE نیستند به نرم افزار Arduino، پرداختیم. در این قسمت قصد داریم به بررسی برنامه نویسی آردوینو و انواع داده‌های آن بپردازیم.

در ادامه سری آموزش آردوینو، به معرفی عناصر اصلی برنامه‌نویسی آردوینو می‌پردازیم. همچنین،‌ بررسی می‌کنیم چگونه افرادی که برنامه‌نویس نیستند، می‌توانند از ساختارهای زبان برنامه‌نویسی آردوینو استفاده کنند و برای افرادی که با زبان C یا C++ (زبانی که آردوینو از آن استفاده می‌کند) آشنا نیستند، یک توضیح مختصری درباره آن می‌دهیم.

زبان برنامه‌نویسی آردوینو

برای برنامه‌نویسی آردوینو، به‌صورت پیش‌فرض از زبان C++ استفاده می‌شود. زبان برنامه‌نویسی آردوینو به سه بخش اصلی تقسیم می‌شود: توابع، مقادیر (متغیرها و ثابت‌ها) و استراکچر. توابع برای کنترل برد آردوینو و انجام محاسبات استفاده می‌شوند. مقادیر شامل متغیرها و ثابت‌ها هستند. همچنین، استراکچر شامل عناصر کد آردوینو می‌شوند.

یک اسکچ معمولی آردوینو

برنامه‌های آردوینو معمولاً به‌عنوان اسکچ شناخته می‌شوند. اسکچ این امکان را برای طراحان فراهم می‌کند تا آن‌ها ایده خود را سریع و آسان پیاده‌سازی کنند.

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

بعد از آپلود کد آردوینو، هر بار که برد را روشن می‌کنید، دستورات از بالای اسکچ شروع و به ترتیب اجرا می‌شوند. همچنین، ‌کد در تابع setup یک‌بار اجرا می‌شود و سپس به تابع loop می‌رود و هنگامی که به انتهای تابع loop می‌رسد (که با علامت } مشخص شده است)، تابع loop را دوباره فراخوانی می‌کند و این کار را تا زمانی که برد خاموش یا ریست شود، انجام خواهد داد.

در این مثال، اگر خروجی‌های HIGH و LOW نوشته شوند، یک LED به‌صورت پیوسته، چشمک می‌زند. هنگامی که اسکچ شروع می‌شود، کد در تابع setup پین مد را تنظیم می‌کند (تا بتواند یک LED را روشن کند). بعد از اتمام کدنویسی در تابع setup، تا زمانی که برد آردوینو روشن باشد، این کد در تابع loop به‌صورت پیوسته فراخوانی می‌شود. (برای چشمک‌زدن LED)

برای نوشتن اسکچ‌های آردوینو لازم نیست این نکته را بدانید، اما ممکن است برای برنامه‌نویسان حرفه‌ای C یا C++ سؤال باشد که پس تابع ورودی main()کجاست. در واقع، این تابع وجود دارد، اما توسط محیط برنامه‌نویسی آردوینو پنهان شده است.

فرایند برنامه‌نویسی آردوینو، یک فایل میانی ایجاد می‌کند که شامل کد اسکچ و دستورات اضافی زیر می‌باشد. در زیر تابع main بردهای 8 بیتی آمده است:  (برای بردهای 32 بیتی نیز مشابه همین است):

تابع init() که سخت‌افزار آردوینو را مقداردهی اولیه می‌کند، اولین تابعی است که فراخوانی می‌شود. بعد از آن، تابع initVariant() فراخوانی می‌شود. اگر میکروکنترلر بر روی برد دارای سخت‌افزار USB اختصاصی باشد، تابع main آن را برای استفاده آماده می‌کند.

سپس تابع setup() و در نهایت، تابع loop()به‌صورت پیوسته فراخوانی می‌شود. به دلیل اینکه لوپ for هرگز پایان نمی‌یابد، دستور return هرگز اجرا نمی‌شود.

بلافاصله بعد از هر تماس به لوپ، تابع main ،serialEven را فراخوانی می‌کند. اگر serialEven روی برد شما پشتیبانی می‌شود،tRun  را اجرا کنید (tRun در بردهایی که بر پایه ATmega32U4 ساخته شده‌اند، پشتیبانی نمی‌شود. مانند لئوناردو و serialEven) اگر سیستم شما قابلیت پشتیبانی داشته باشد، این امکان فراهم می‌شود که شما یک تابع خاص به نام serialEvent را به اسکچ خود اضافه کنید تا هر زمان که داده در پورت سریال موجود باشد، فراخوانی ‌شود.

انواع داده‌های آردوینو

آردوینو دارای انواع مختلفی از داده‌ها (متغیرها) برای نمایش مقادیر است. در ادامه با نحوه انتخاب و استفاده از انواع داده‌های آردوینو، آشنا خواهید شد.

نوع داده int (مخفف integer) برای نمایش مقادیر عددی در برنامه‌های آردوینو، بیش‌ترین کاربرد را دارد. شما می‌توانید از جداول 1 و 2 استفاده کنید تا نوع داده‌ای که بازه مقادیر برنامه شما را پوشش می‌دهد، تعیین کنید. جدول 1 نوع داده‌ها را برای بردهای 8 بیتی و جدول 2 نوع داده‌ها را برای بردهای 32 بیتی نشان می‌دهد.

جدول 1 انواع داده های آردوینو برای بردهای 8 بیتی مانند Uno را نشان می دهد. این جدول به شرح زیر است:

نوع دادهتعداد‌ بایتمحدودهکاربرد
int232768– تا 32767مقادیر اعداد صحیح مثبت و منفی
unsigned int20 تا 65535فقط مقادیر مثبت
long42147483648- تا 2147483648یک بازه بسیار بزرگ از مقادیر مثبت و منفی
unsigned long44294967295یک بازه بسیار بزرگ از مقادیر مثبت
float43.4028235E+38 تا 3.4028235E+38-اعداد کسری؛ قابل استفاده برای اندازه گیری های تقریبی واقعی
double4مشابه floatدر آردوینو؛ Double نام دیگر Float است
bool1false(0) یا true(1)مقادیر درست و غلط (True و False)
char1128- تا 127کاراکتر منفرد برای مقادیر علامت دار بین ۱۲۸ـ و ۱۲۷
byte10 تا 255مشابه مورد قبل یعنی char اما برای مقادیر بدون علامت
سایر داده هاکاربرد
Stringمجموعه ای از کاراکترها که معمولاً برای تکست (متن) استفاده می شود.
voidفقط در اعلان های تابعی که هیچ مقداری برگردانده نمی شود.

 

جدول 2 انواع داده های آردوینو برای بردهای 32 بیتی مانند Zero و 101 را نشان می‌دهد. جدول 2 به شرح  زیر است:

نوع دادهتعداد بایتمحدودهکاربرد
short int232768– تا 32767مشابه int در بردهای ۸ بیتی
unsigned short int20 تا 65535مشابه unsigned در بردهای ۸ بیتی
int42147483648- تا 2147483648مقادیر اعداد صحیح مثبت و منفی
unsigned int40 تا 4294967295مقادیر مثبت؛ مشابه int
long42147483648- تا 2147483648مشابه int
unsigned long44294967295مشابه int unsigned
float4±3.4028235E+38مشابه int unsigned
double1±1.7976931348623158E+308بردهای ۳۲ بیتی که بازه و دقت بیش تری نسبت به بردهای ۸ بیتی دارند.
bool1 false(0) یا true(1)مقادیر درست و غلط (True و False)
char1128- تا 127کاراکتر منفرد. برای مقادیر علامت دار بین ۱۲۸ـ و ۱۲۷
byte10 تا 255مشابه مورد قبل یعنی char اما برای مقادیر بدون علامت
سایر داده هاکاربرد
Stringمجموعه ای از کاراکترها که معمولاً برای تکست (متن) استفاده می شود.
voidفقط در اعلان های تابعی که هیچ مقداری برگردانده نمی شود.

به جز در مواردی که کارایی حداکثر یا کارایی حافظه موردنیاز است، متغیرهایی که با استفاده از int تعریف شده‌اند، برای مقادیر عددی مناسب هستند؛ البته درصورتی‌که مقادیر از محدوده (نشان‌داده‌شده در جدول 1) بیش تر نباشند و نیازی به کار با مقادیر اعشاری نداشته باشید.

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

به‌عنوان‌مثال، تابع millis، یک مقدار unsigned long برمی‌گرداند. اگر شما از int برای ذخیره نتایج آن تابع در یک برد 8 بیتی استفاده کنید، هشداری دریافت نمی کنید، اما نتایج اشتباهی حاصل خواهد شد؛ زیرا int برای نگهداری حداکثر مقدار long کافی نیست و بعد از رسیدن به مقدار 32،767، به مقدار 32،768- برمی‌گردد. اگر شما سعی کنید long را در unsigned int قرار دهید، بعد از عبور از حداکثر مقدار unsigned int (65،535)، به مقدار صفر برمی‌گردید.

  • در برنامه‌نویسی، نوع داده‌های عددی به دو نوع signed و unsigned تقسیم می‌شوند. مقادیر unsigned همیشه مثبت هستند. متغیرهایی که کلیدواژه unsigned در ابتدای آن‌ها نیست، signed هستند تا بتوانند مقادیر مثبت و منفی را نمایش دهند.
  • یک int در یک برد 32 بیتی در مقایسه با یک برد 8 بیتی، به دو برابر بایت نیاز دارد. با این حال، اکثر کدهای 8 بیتی روی بردهای 32 بیتی اجرا می شوند.

به‌عنوان‌مثال، برای نگهداری اعداد صحیح 32 بیتی، باید از نوع داده int32 استفاده کنیم. در این صورت، هیچگاه نباید فرض کنیم که اعداد صحیح در حافظه با 2 بایت نمایش داده می‌شوند. این موضوع در برنامه‌نویسی به عنوان یک استثناء نادر شناخته شده است و باید از آن پرهیز کرد.

  • نوع داده bool یا boolean دارای دو مقدار است: true یا false. این داده‌ معمولاً برای نگهداری مقادیری که یک شرط بله/خیر را نشان می‌دهند، استفاده می‌شود. همچنین، ممکن است این داده در جایگاه HIGH و LOW نیز استفاده شود که برای تغییر وضعیت پین ورودی/خروجی دیجیتال استفاده می‌شوند.

به‌عنوان‌مثال، عبارت ; )  HIGH  digitalWrite(LED_BUILTIN یعنی پینی که LED به آن متصل است را به برق وصل کنید.

اگر از LOW به‌جای HIGH استفاده کنید، برق قطع خواهد شد. همچنین، شما می‌توانید از true یا false به‌جای HIGH یا LOW استفاده کنید. بااین‌حال، در اکثر موارد شما مجبورید از ثابت‌های HIGH و LOW استفاده کنید؛ زیرا بسیار بعید است که در یک برد آردوینو، HIGH برابر با false باشد.

برای کسب اطلاعات بیش‌تر درباره کلیه داده های آردوینو به صفحه رفرنس آردوینو مراجعه کنید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *