دستور setup() در آردوینو چیست؟ آموزش کامل با مثال

دستور setup() در آردوینو چیست؟ آموزش کامل با مثال ، اگر تازه وارد دنیای برنامهنویسی آردوینو شده باشید، احتمالاً در همان اولین پروژهی خود با دو تابع آشنا میشوید: setup() و loop(). این دو تابع ستون فقرات هر برنامه (یا به اصطلاح آردوینوییها، «اسکچ») هستند و بدون آنها هیچ کدی روی برد اجرا نمیشود. در این مقاله بهطور کامل و دقیق با تابع setup() آشنا میشویم، نحوهی نوشتن آن را بررسی میکنیم و با چند مثال عملی کاربردش را در پروژههای واقعی نشان میدهیم. این مطلب بخشی از آموزش برنامهنویسی آردوینو برای مبتدیان است و میتواند پایهی خوبی برای یادگیری ساختار کلی زبان آردوینو باشد.
تابع setup() یکی از دو تابع اجباری در هر اسکچ آردوینو است. این تابع بلافاصله بعد از روشن شدن یا ریست شدن برد فراخوانی میشود و تنها یکبار اجرا میگردد. به همین دلیل، setup() بهترین جا برای انجام کارهای مقداردهی اولیه است؛ کارهایی مانند تعریف حالت پایهها (ورودی یا خروجی بودن پینها)، راهاندازی ارتباط سریال، مقداردهی اولیهی متغیرها، یا فراخوانی توابع آمادهسازی کتابخانههایی که در پروژه استفاده میکنید.
نکتهی مهم این است که کدهای داخل setup() فقط یک بار، در همان لحظهی روشنشدن یا ریست برد، اجرا میشوند و دیگر تکرار نخواهند شد. برخلاف آن، تابع loop() بینهایت بار و پشت سر هم اجرا میشود و منطق اصلی برنامه معمولاً آنجا نوشته میشود.
نحوهی نوشتار (Syntax) و پارامترها
ساختار کلی تابع setup() به این شکل است:
arduino
void setup() {
// کدهای مقداردهی اولیه اینجا نوشته میشوند
}
نکات مربوط به نحوهی نوشتار:
- تابع
setup()هیچ پارامتری نمیگیرد؛ پرانتز جلوی آن همیشه خالی است. - کلمهی کلیدی
voidقبل از نام تابع نشان میدهد که این تابع مقداری را برنمیگرداند. - تمام دستورات باید داخل آکولاد
{ }نوشته شوند. - نام این تابع دقیقاً باید
setupباشد (با حروف کوچک) تا کامپایلر آردوینو آن را بهعنوان تابع ویژهی راهاندازی بشناسد.
مقدار بازگشتی (Return Value)
تابع setup() هیچ مقداری برنمیگرداند. به همین دلیل نوع بازگشتی آن void تعریف شده است. اگر در کد نیاز دارید دادهای را نگه دارید یا بین بخشهای مختلف برنامه به اشتراک بگذارید، باید از متغیرهای سراسری (Global Variables) استفاده کنید که خارج از setup() و loop() تعریف میشوند.
کد نمونهی کامل
در مثال زیر، یک دکمهی فشاری (Push Button) به پین شمارهی ۳ متصل شده و ارتباط سریال با نرخ ۹۶۰۰ بیت بر ثانیه راهاندازی میشود. تمام این مقداردهیها فقط یکبار، در setup() انجام میشوند:
arduino
// تعریف متغیر سراسری برای شمارهی پین دکمه
int buttonPin = 3;
void setup() {
// راهاندازی ارتباط سریال با نرخ 9600 بیت بر ثانیه
// Initialize serial communication at 9600 bits per second
Serial.begin(9600);
// تنظیم پین دکمه بهعنوان ورودی
// Set buttonPin as an INPUT
pinMode(buttonPin, INPUT);
}
void loop() {
// کد اصلی برنامه که بهطور مداوم تکرار میشود
// Main code that runs repeatedly
}
توضیح خطبهخط:
- خط ۲: متغیر
buttonPinبهصورت سراسری تعریف شده تا هم درsetup()و هم درloop()قابل دسترسی باشد. - خط ۵ (داخل setup): با
Serial.begin(9600)ارتباط سریال بین آردوینو و کامپیوتر با سرعت ۹۶۰۰ بیت بر ثانیه برقرار میشود. این کار فقط یکبار لازم است، بنابراین جایش داخلsetup()است، نهloop(). - خط ۹ (داخل setup): با
pinMode(buttonPin, INPUT)مشخص میشود که پین شمارهی ۳ بهعنوان ورودی رفتار کند، چون قرار است سیگنال دکمه را بخوانیم. - تابع loop(): خالی گذاشته شده، چون تمرکز این مثال روی
setup()است؛ در پروژهی واقعی، خواندن وضعیت دکمه و اجرای منطق برنامه اینجا قرار میگیرد.
نکات و هشدارهای رایج
- اشتباه رایج مبتدیان: قرار دادن
pinMode()یاSerial.begin()داخلloop()بهجایsetup(). این کار باعث میشود این دستورات هزاران بار در ثانیه تکرار شوند که هم غیرضروری است و هم میتواند رفتار غیرمنتظره ایجاد کند (مثلاً قطع و وصل مکرر ارتباط سریال). - فراموش کردن تابع setup() یا loop(): هر اسکچ آردوینو حتماً باید هر دو تابع را داشته باشد، حتی اگر یکی از آنها خالی باشد؛ در غیر این صورت کامپایل با خطا مواجه میشود.
- حروف بزرگ و کوچک: نام تابع باید دقیقاً
setupنوشته شود (نهSetupیاSETUP)، چون زبان آردوینو نسبت به بزرگی و کوچکی حروف حساس است. - فراخوانی مستقیم setup(): نیازی نیست شما خودتان
setup()را صدا بزنید؛ این تابع بهصورت خودکار توسط برنامهی اصلی آردوینو (main) در پسزمینه فراخوانی میشود. - کدهای طولانی و تأخیردار: از قرار دادن حلقههای بینهایت یا تأخیرهای بسیار طولانی داخل
setup()خودداری کنید، مگر اینکه واقعاً بخواهید قبل از شروع برنامهی اصلی، مرحلهای زمانبر (مثل اتصال به وایفای) انجام شود.
کاربردهای عملی و پروژههای پیشنهادی
تابع setup() در تقریباً همهی پروژههای آردوینو کاربرد دارد. چند نمونهی رایج:
- پروژهی چشمکزن LED (Blink): تنظیم پین LED بهعنوان خروجی با
pinMode(LED_BUILTIN, OUTPUT)درsetup(). - پروژههای سنسوری: راهاندازی سنسورهای دما، رطوبت یا فاصله که معمولاً نیاز به یک تابع مقداردهی اولیه از کتابخانهی مربوطه دارند (مثل
dht.begin()یاlcd.begin()). - پروژههای مبتنی بر ارتباط سریال: هر پروژهای که نیاز به نمایش داده در Serial Monitor دارد، حتماً باید
Serial.begin()را درsetup()فراخوانی کند. - پروژههای وایفای و بلوتوث: اتصال اولیه به شبکه یا جفتسازی بلوتوث معمولاً در
setup()انجام میشود تا فقط یکبار در ابتدای کار رخ دهد. - پروژههای موتور و سروو: تعریف پینهای کنترل موتور یا اتصال سروو به پین مشخص، از کارهای رایجی است که در
setup()جای میگیرد.
سوالات متداول
خیر. هر اسکچ آردوینو باید حتماً هر دو تابع setup() و loop() را داشته باشد، حتی اگر یکی از آنها بدنهی خالی داشته باشد. در غیر این صورت، کامپایلر خطا میدهد.
تنها یکبار؛ درست بعد از روشن شدن برد یا هر بار که برد ریست شود (مثلاً با فشردن دکمهی Reset یا آپلود مجدد کد).
setup() فقط یکبار برای مقداردهی اولیه اجرا میشود، اما loop() بینهایت بار و پشت سر هم تکرار میشود و منطق اصلی برنامه در آن قرار دارد.
بله، هیچ محدودیتی برای استفاده از ساختارهای کنترلی مانند if یا while داخل setup() وجود ندارد؛ همان قوانین معمول زبان C/C++ در آنجا هم برقرار است.
خیر. setup() نه پارامتری میگیرد و نه مقداری برمیگرداند؛ نوع بازگشتی آن همیشه void است.
این رفتار طبیعی است، چون باز کردن پورت سریال روی بسیاری از بردهای آردوینو (مانند Uno) باعث ریست شدن برد میشود و در نتیجه setup() دوباره فراخوانی میشود.
جمعبندی
دستور setup() در آردوینو چیست؟ آموزش کامل با مثال ، تابع setup() نقطهی شروع هر پروژهی آردوینویی است و شناخت دقیق آن، پایهی درک ساختار کلی برنامهنویسی آردوینو محسوب میشود. با تمرین و ساختن پروژههای کوچک مثل چشمکزن LED یا خواندن مقدار سنسور، بهمرور با کاربردهای متنوع این تابع آشنا خواهید شد. برای ادامهی یادگیری، پیشنهاد میشود آموزش تابع loop() و همچنین مبحث توابع پایهای مثل pinMode() و digitalWrite() را نیز مطالعه کنید.
دیدگاههای محترمانه: لطفاً نظرات خود را با رعایت احترام به دیگران و به صورت محترمانه ارسال کنید. از بهکار بردن زبان توهینآمیز، تهدیدآمیز یا نژادپرستانه خودداری کنید.
حفظ حریم خصوصی: از درج اطلاعات شخصی خود یا دیگران مانند شماره تماس، آدرس و هرگونه اطلاعات حساس خودداری کنید.
محتوای تبلیغاتی: ارسال دیدگاههای تبلیغاتی، لینکهای خارجی یا هر نوع محتوای تجاری که مرتبط با موضوع نباشد، ممنوع است.
موافقت با قوانین: با ارسال دیدگاه خود، شما تأیید میکنید که قوانین فوق را خوانده و با آنها موافقید. تیم ما حق دارد نظرات غیرمجاز را حذف کند.
پروژه های پیشنهادی
پروژه ریموت کنترل کدلرن حرفه ای
مشاهده پروژهپروژه امپلی فایر صوتی استریو با TDA2030
مشاهده پروژهپروژه قفل دیجیتال با ماژول RFID RC522
مشاهده پروژه