شرط نویسی برای سنسورها در واقع مسیر به آن ها میدهد. دستورات برنامه نویسی مهمی مثل if else, switch case, for از جمله کاربردی ترین ساختارهای کنترلی است. اینکه هر کدام با چه شرایطی و چگونه استفاده و فراخوانی شود، ما در این آموزش به آن خواهیم پرداخت. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ساختار تکرار for
در برنامهنویسی C++، ساختار تکرار for برای اجرای یک بلاک کد با مشخص بودن تعداد دفعات تکرار استفاده میشود.
- اعلان و مقداردهی اولیه (Initialization): در این بخش، شما متغیرها را اعلان و مقداردهی اولیه میکنید. این بخش فقط یک بار اجرا میشود.
- شرط ادامه (Condition): در این بخش، یک شرط تعیین میکنید که تا زمانی که این شرط درست باشد، حلقه for ادامه مییابد. اگر این شرط نادرست باشد، حلقه متوقف میشود.
- اعمال پس از هر دور (Update): در این بخش، شما میتوانید مقادیر متغیرها را به روز کنید. این بخش معمولاً برای افزایش یا کاهش متغیرهای مشارکتی (مانند شمارنده) استفاده میشود.
ساختار کلی for به صورت زیر است:
for (Initialization; Condition; Update) {
// بلاک کدی که تکرار میشود
}
تصور کنید میخواهید ۵۰ عدد را از ورودی دریافت و با استفاده از دستورات عملگری که یاد گرفتیم، یک عمل خاصی مانند جمع یا تفریق را روی آن ها انجام دهیم! یعنی ۵۰ بار باید تکرار کنیم! پس اصلا منطقی نیست! برای اینکار میتوانیم از ساختار تکرار for استفاده کنیم. ساختار تکرار for برای ساخت حلقه است و معمولا در حالتی که تعداد دفعات تکرار حلقه از قبل مشخص باشد، از آن استفاده میکنیم.
- متغیر شمارنده تعداد دفعات تکرار حلقه را کنترل میکند.
- مقدار اولیه در برنامه در هر بار اجرای دستورات ، مقداری به آن اضافه میشود.
- این افزایش مقدار توسط گام حرکت مشخص میشود.
- گام حرکت میتواند عدد مثبت، منفی و اعشاری باشد.
- شرط حلقه مشخص میکند که دستورات داخل حلقه تا چه زمانی باید اجرا شود.
- اگر شرطی که مینویسیم دارای ارزش درستی True باشد، دستورات اجرا میشود.
- در غیر اینصورت کنترل برنامه از حلقه تکرار خارج میشود.
for (i = 1; i<10; i++)
نمونه برنامه استفاده از for در آردوینو
در قدم اول نیاز به یک ال ای دی و یک آردوینو داریم. برای برنامه نویسی یک پایه برای ال ای دی در برنامه تعریف میکنیم. میخواهیم شدت نور ال ای دی با ساختار تکرار for تغییر کند. با توجه به اینکه ال ای دی به صورت صفر و یکی است، در حالت صفر مقدار صفر و در حالت یک مقدار ۲۵۵ را دارد. پس برای ایجاد یک ساختار تکرار در برنامه نویسی باید سه اصل را رعایت کنیم.
- مقدار اولیه را مشخص کنیم.
- شرط حلقه را مشخص کنیم.
- گام حرکت را مشخص کنیم.
برای روند افزایشی پایه ها از دستور تکرار for با شرط i<256 شروع میکنیم. مقدار اولیه صفر است، یعنی ال ای دی خاموش است. گام حرکت ++ است که به صورت افزایشی است. برای روند کاهشی پایه ها از دستور تکرار for با شرط i>0 شروع میکنیم. مقدار اولیه ۲۵۵ است، یعنی ال ای دی روشن و در بیشترین حالت روشن یودن است . گام حرکت — است که به صورت کاهشی است.
int led = 3; // تعریف یک پایه برای ال ای دی int delaytime= 2; // تعریف تاخیر در اجرا void setup() { pinMode(led, OUTPUT); // تعریف ال ای دی به عنوان خروجی Serial.begin(9600); // سریال مانیتور } void loop() { // شرط نویسی برای ال ای دی // شرط حلقه تغییر شدت نور ال ای دی است // در حالت اول مقدار اولیه صفر است // یعنی در مرحله اول ال ای دی خاموش است // سپس شرط حلقه را بازه دیجیتال بین ۰ تا ۲۵۶ در نظر میگیریم. // گام حرکت افزایشی است for(int i = 0; i<256; i++) // نوشتن دستور for { analogWrite(led, i); // استفاده از آنالوگ برای افزایش و کاهش پایه delay(delaytime); Serial.println(i); } // در مرحله دوم میخواهیم شدت نور ال ای دی کاهش یابد // پس روند باید برعکس قبل باشد // شرط حلقه برای مقادیر بزرگتر از صفر است. // مقدا ر اولیه برابر با ۲۵۵ یعنی بالاترین حد روشن بودن ال ایدی است. for(int i = 255; i>0; i--) // روند کاهشی برای ال ای دی { analogWrite(led, i); delay(delaytime); Serial.println(i); } }
ساختار تکرار while
یکی دیگر از دستورات تکرار در حلقه برنامه نویسی برای آردوینو while است. در ابتدا، عبارت شرطی داخل پرانتز بررسی می شود. اگر عبارت شرطی درست Trueباشد، دستورات داخل حلقه while اجرا می شوند و سپس دوباره عبارت شرطی بررسی میشود. این روند ادامه می یابد تا زمانی که عبارت شرطی نادرست شود. اگر عبارت شرطی نادرست false شود و مقدار صفر را برگرداند، حلقه پایان می یابد. در برنامهنویسی C++، ساختار تکرار while برای اجرای یک بلاک کد تا زمانی که یک شرط مشخص درست باشد، استفاده میشود. ساختار اصلی تکرار while به شکل زیر است:
while (شرط) {
// بلاک کدی که تکرار میشود
}
به عبارت داخل پرانتز شرط، یک مقدار بولی (true یا false) ارائه میدهید. تا زمانی که این شرط درست باشد، بلاک کد درون حلقه تکرار میشود. اگر شرط نادرست باشد، حلقه متوقف میشود.در این مثال، متغیر i به عنوان شمارنده از ۰ تا ۴ به تدریج افزایش مییابد و بلاک کد درون حلقه while تا زمانی که مقدار i کمتر از ۵ باشد، اجرا میشود. سپس با افزایش i به ۵، شرط درست نمیشود و حلقه توقف مییابد.
while (loop test expression goes here) { Statements that run in the loop go here Statement 1 Statement 2 ... }
تست برنامه با while
var = 0; مقدار اولیه صفر while (var < 100 { // ۱۰۰ بار تکرار میشود var++; روند افزایشی با عملگر }
void setup() { int i = 0; Serial.begin(9600); while (i < 10) { Serial.print("i = "); Serial.println(i); i++; } } void loop() { }
void setup() { int sum = 0; Serial.begin(9600); // count up to 25 in 5s while (sum < 25) { sum = sum + 5; Serial.print("sum = "); Serial.println(sum); delay(500); // 500ms delay } } void loop() { }
ساختار تکرار do while
همانند ساختار while است با این تقاوت که در ساختار while شرط حلقه در ابتدای حلقه تست شده و در do while شرط در انتها تست میشود. بدنه حلقه do…while یکبار اجرا می شود سپس عبارت شرطی بررسی خواهد شد. اگر عبارت شرطی درست true باشد، بدنه حلقه دوباره اجرا شده و عبارت شرطی نیز دوباره بررسی می شود. این روند ادامه می یابد تا زمانی که عبارت شرطی نادرست false شود.اگر عبارت شرطی نادرست false باشد و مقدار صفر ۰ برگرداند، حلقه تمام می شود.
در برنامهنویسی C++، ساختار تکرار do while برای اجرای یک بلاک کد حداقل یک بار و سپس ادامه تکرار تا زمانی که یک شرط مشخص درست باشد، استفاده میشود. ساختار اصلی تکرار do while به شکل زیر است:
do {
// بلاک کدی که حداقل یک بار اجرا میشود
} while (شرط);
بلاک کد داخل do حداقل یک بار اجرا میشود، حتی اگر شرط در ابتدا نادرست باشد. سپس بعد از اجرای بلاک کد، شرط برای تعیین ادامه تکرار بررسی میشود. اگر شرط درست باشد، بلاک کد به صورت تکراری اجرا میشود. اگر شرط نادرست باشد، حلقه do while متوقف میشود.
do { Statements that run in the loop go here Statement 1 Statement 2 ... } while (test expression goes here
تست برنامه با do while
int var = 0; do { delay(50); // تعریف تاخیر var = readSensors(); } while (var < 100);
void setup() { int sum = 0; Serial.begin(9600); // count up to 25 in 5s do { sum = sum + 5; Serial.print("sum = "); Serial.println(sum); delay(500); // 500ms delay } while (sum < 25); } void loop() { }
تفاوت while و do while در برنامه نویسی
تفاوت اصلی بین دو ساختار تکرار while و do while در برنامهنویسی C++ در ترتیب اجرای بلاک کد و شرط است. در حالی که هر دو حلقه تکرار را برای اجرای بلاک کد تا زمانی که یک شرط مشخص درست باشد، استفاده میکنند، اما تفاوتهای زیر وجود دارد:
ترتیب اجرای بلاک کد:
- در حلقه while، شرط قبل از اجرای بلاک کد بررسی میشود. اگر شرط درست نباشد، بلاک کد درون حلقه اصلا اجرا نمیشود.
- در حلقه do while، بلاک کد حداقل یک بار اجرا میشود، بدون در نظر گرفتن اینکه شرط درست باشد یا نه. سپس شرط در انتهای حلقه بررسی میشود و اگر شرط درست باشد، بلاک کد به صورت تکراری اجرا میشود.
مقدار حداقل تکرار:
- حلقه while ممکن است هیچ باری اجرا نشود اگر شرط در ابتدا نادرست باشد.
- حلقه do while حداقل یک بار بلاک کد را اجرا میکند حتی اگر شرط در ابتدا نادرست باشد.
در موارد مختلف، شما باید بین حلقه while و do while انتخاب کنید وابسته به نیازهای خاص برنامهی خود. اگر بلاک کد شما حتما باید حداقل یک بار اجرا شود، ممکن است از حلقه do while استفاده کنید. اما اگر شرطی وجود دارد که ممکن است هیچ باری بلاک کد اجرا نشود، ممکن است حلقه while بهترین گزینه باشد.
ساختار تصمیم if
اگر در برنامه نویسی آردوینو بخواهیم تحت شرایطی تعدادی از دستورات اجرا و یا تعدادی دیگر اجرا نشود، از ساختارهای تصمیم استفاده میکنیم. ساختار if شرطی را تست کرده، در صورت درست بودن شرط، دستورات را اجرا میکند. ساختار if دستور انتقال کنترل شرطی است و در ابتدا شرطی را تست میکند و در صورتی که شرط دارای ارزش درستی باشد، مجموعه ای از دستورات را اجرا میکند.
روش اول فراخوانی
روش دوم فراخوانی
تست برنامه با if else
if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) digitalWrite(LEDpin, HIGH); if (x > 120) {digitalWrite(LEDpin, HIGH);} if (x > 120) { digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); }
تست کد if else
#define TouchSensor 9 int led = 2; boolean currentState = LOW; boolean lastState = LOW; boolean ledState = LOW; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); pinMode(TouchSensor, INPUT); } void loop() { currentState = digitalRead(TouchSensor); if (currentState == HIGH && lastState == LOW){ Serial.println("pressed"); delay(1); if (ledState == HIGH){ digitalWrite(led, LOW); ledState = LOW; } else { digitalWrite(led, HIGH); ledState = HIGH; } } lastState = currentState; }
ساختار تصمیم switch case
تصور کنید بخواهید یک منو با ال سی دی و آردوینو طراحی کنید. هر کلید یک نقش را ایفا میکند. اگر تعداد کلیدها افزایش پیدا کند، روند کدنویسی پیچیده و طولانی میشود. در این مرحله بهترین انتخاب استفاده از ساختار تصمیم switch است. برای Switch از حالت یا همان case استفاده میکنیم. ساختار Switch میتواند بدون default باشد. مقادیر case ها نمیتواند با هم مساوی باشد. اگر در یک case از دستور break استفاده نشود با مقدار case بعدی or میشود. تفاوت if , switch این است که در ساختار if میتوانید عبارت منطقی و رابطه ای را بررسی کنید و در ساختار switch فقط مساوی بودن مقادیر بررسی میشود.ساختار تصمیم switch و case در برنامهنویسی C++ برای انجام یکی از چند عملیات مختلف بر اساس مقدار یک عبارت یا متغیر استفاده میشود. این ساختار به شکل زیر تعریف میشود:
switch (var) { case label1: // statements break; case label2: // statements break; default: // statements break; }
تست برنامه با switch case
switch (var) { case 1: //do something when var equals 1 break; case 2: //do something when var equals 2 break; default: // if nothing else matches, do the default // default is optional break; }
کد تست switch case
int potPin = A0; int lastPotValue; void setup() { pinMode(potPin, INPUT); Serial.begin(9600); } void loop() { int potValue = analogRead(potPin) / 255; if(potValue != lastPotValue) { switch(potValue) { case 0: Serial.println("Very Low"); break; case 1: Serial.println("Low"); break; case 2: Serial.println("Moderate"); break; case 3: Serial.println("High"); break; case 4: Serial.println("Extreme"); break; default: Serial.println("error!"); break; } lastPotValue = potValue; } }
جمع بندی
در حالت عادی با یک دستور ورودی و خروجی در حلقه ی برنامه دستورات از اول به آخر اجرا میشود. حال اگر بخواهیم شرط نویسی کنیم یعنی دستورات تحت شرایط خاصی اجرا و بعضی دیگر اجرا نشود نیاز به ساختارهای کنترلی داریم. ساختار کنترلی در حالت عادی به دو دسته تقسیم میشود ساختار تکرار و ساختار تصمیم در برنامه نویسی که از مهم ترین و پایه ترین دستورات در آردوینو است. ساختار تکرار برای تکرار اجرای دستورات و ساختار تصمیم برای بررسی شرایطی در برنامه و تصمیم گیری بر اساس آن شرط در کدنویسی آردوینو فراخوانی میشود.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
خسته نباشی مهندس اموزش عالی بود
سپاس از همراهی شما
با سلام
اگر بخواهیم از if تو در تو استفاده کنیم الگو به چه صورت است
با سلام
عملا استفاده از if تو در تو در کد منظقی نیست. باییستی از else if استفاده کنید.
با سلام
کاربرد switch case در پروژه های آردوینو چیست؟
با سلام
میتوانید چندین حالت مختلف برای ورودی و خروجی ها در برنامه تعریف کنید که هر کیس یک کار متفاوتی را انجام دهد. اموزش زیر را بررسی کنید.
ساخت ال ای دی rgb
سلام آیا برای استفاده از ذخیره ی حالت های یک متغیر بایستی از boolean استفاده کنیم؟
با سلام
بله از مقادیر منطقی برای true , false بودن آن متغیر در کد ها بایستی استفاده شود.
با سلام برای شرط نویسی برای تغییر وضعیت ورودی و خروجی چه کاری باید انجام بدیم
با سلام
در همین آموزش بخش if else را مطالعه کنید.
سلام وقت بخیر ببخشید من کد مربوط به دستور switch را اجرا کردم ولی در سریال مانیتور موقعی که پتانسیومتر را میچرخونم فقط error را نمایش میده آیا درسته یا جایی مشکل داره؟
با سلام
از همین کد استفاده کردید؟اگر پیغام ارور نمایش داده شده است، یعنی ارتباط قطع است. بررسی و نتیجه را اعلام کنید.
سلام مهندس آیا امکان استفاده از if else while for در Setup برنامه وجود دارد؟
با سلام
بله هیچ محدودیتی برای استفاده از ساختارها در کدنویسی وجود ندارد.
با سلام
آیا برای for بابستی در حلقه حتما دستورات هم بنویسیم؟
با سلام
بله حتما بایستی دستوری که میخواهید طی یک تکرار مشخص در برنامه اجرا شود را فراخوانی کنید.
سلام مهندس برای while حتما باید break زده شود؟
با سلام
اگر بخواهید از حلقه ی while خارج شوید تا مابقی کد اجرا شود، در پایان حلقه while از break استفاده کنید.
سلام
آیا میشه جوی استیک رو بدون if else و با Switch نوشت؟
با سلام
بله این مورد کاملا وابسته به کاری که قرار است انجام دهید و خلاقیت در کدنویسی است.
با سلام و خسته نباشید
برای شروع کار با این آموزش ها کدام برد آردوینو را تهیه کنیم؟
با سلام
برد آردوینو مدل uno r3 مناسب است.
لینک خرید
سلام
آیا if تو در تو باعث هنگی برنامه نمیشه؟
با سلام
خیر چنین موردی وجود ندارد و کد بهینه تر خواهد شد.
سلام
ایا برای ماژول های انالوگ مثل جوی استیک هم از switch case میتوان استفاده کرد؟
با سلام
کاربر گرامی این مورد اصلا ارتباطی با نوع ماژول ندارد.
سلام.۱۰ تا سروموتو داریم و میخواهیم هر بار که میکرو سوئیچ را میزنیم یکی یکی به زاویه مشخص شده مثلا ۹۰درجه بروند. شدنی هست؟ نمونه کد میتونید در اختیارم بگذارید؟
با سلام
بله این مورد امکان پذیر است. کد آماده برای اینکار موجود نیست.
سلام و خسته نباشید
برای این آموزش ها از چه بردی باید استفاده کنیم؟
با سلام
کاربر گرامی از سری بردهای آردوینو میتوانید استفاده کنید. لینک زیر را بررسی کنید.
https://daneshjookit.com/121-%D8%A8%D8%B1%D8%AF-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88-arduino
خیلی ممنون از آموزشتون
امکانش هست بگید چرا برای حلقه for، محدوده i تا ۲۵۶ گذاشتید؟
با سلام
رنج خروجی دیجیتال ۰ تا ۲۵۵ است.
سلام و وقت بخیر
دستوری که مینویسم رو چطور میتونم با حلقه for ،بدون چندبار نوشتن برای A0 تا A3 تکرار کنم؟(amp0 تا amp3)
float amp0 = analogRead(A0);
متشکرم
با سلام
کافیست تعداد دفعات تکرار دستور را در حلقه ی for بنویسید و شرط را مشخص کنید.