ساخت پروژه الکترونیک
0 محصولات نمایش سبد خرید

هیچ محصولی در سبد خرید نیست.

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

دستور 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() است؛ در پروژه‌ی واقعی، خواندن وضعیت دکمه و اجرای منطق برنامه اینجا قرار می‌گیرد.
مقاله پیشنهادی  آموزش ساخت دیتالاگر با آردوینو ثبت دما رطوبت و نور روی کارت SD

نکات و هشدارهای رایج

  • اشتباه رایج مبتدیان: قرار دادن 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() جای می‌گیرد.
مقاله پیشنهادی  آموزش راه‌ اندازی سنسور دما و رطوبت DHT11 با اردوینو Arduino

سوالات متداول

1. آیا می‌توان بدون تابع setup() یک اسکچ آردوینو نوشت؟

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

2. چند بار setup() اجرا می‌شود؟

تنها یک‌بار؛ درست بعد از روشن شدن برد یا هر بار که برد ریست شود (مثلاً با فشردن دکمه‌ی Reset یا آپلود مجدد کد).

3. تفاوت setup() و loop() چیست؟

setup() فقط یک‌بار برای مقداردهی اولیه اجرا می‌شود، اما loop() بی‌نهایت بار و پشت سر هم تکرار می‌شود و منطق اصلی برنامه در آن قرار دارد.

4. آیا می‌توان از حلقه‌های while یا if داخل setup() استفاده کرد؟

بله، هیچ محدودیتی برای استفاده از ساختارهای کنترلی مانند if یا while داخل setup() وجود ندارد؛ همان قوانین معمول زبان C/C++ در آنجا هم برقرار است.

5. آیا setup() می‌تواند پارامتر بگیرد یا مقداری برگرداند؟

خیر. setup() نه پارامتری می‌گیرد و نه مقداری برمی‌گرداند؛ نوع بازگشتی آن همیشه void است.

6. چرا برنامه‌ی من هر بار Serial Monitor را باز می‌کنم دوباره اجرا می‌شود؟

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

جمع‌بندی

دستور setup() در آردوینو چیست؟ آموزش کامل با مثال ، تابع setup() نقطه‌ی شروع هر پروژه‌ی آردوینویی است و شناخت دقیق آن، پایه‌ی درک ساختار کلی برنامه‌نویسی آردوینو محسوب می‌شود. با تمرین و ساختن پروژه‌های کوچک مثل چشمک‌زن LED یا خواندن مقدار سنسور، به‌مرور با کاربردهای متنوع این تابع آشنا خواهید شد. برای ادامه‌ی یادگیری، پیشنهاد می‌شود آموزش تابع loop() و همچنین مبحث توابع پایه‌ای مثل pinMode() و digitalWrite() را نیز مطالعه کنید.

امتیاز دادن به مطلب
0
دیدگاه‌های نوشته

  1. دیدگاه‌های محترمانه: لطفاً نظرات خود را با رعایت احترام به دیگران و به صورت محترمانه ارسال کنید. از به‌کار بردن زبان توهین‌آمیز، تهدیدآمیز یا نژادپرستانه خودداری کنید.

  2. حفظ حریم خصوصی: از درج اطلاعات شخصی خود یا دیگران مانند شماره تماس، آدرس و هرگونه اطلاعات حساس خودداری کنید.

  3. محتوای تبلیغاتی: ارسال دیدگاه‌های تبلیغاتی، لینک‌های خارجی یا هر نوع محتوای تجاری که مرتبط با موضوع نباشد، ممنوع است.

  4. موافقت با قوانین: با ارسال دیدگاه خود، شما تأیید می‌کنید که قوانین فوق را خوانده و با آن‌ها موافقید. تیم ما حق دارد نظرات غیرمجاز را حذف کند.


*
*