شرط نویسی برای سنسورها در واقع مسیر به آن ها میدهد. دستورات برنامه نویسی مهمی مثل if else, switch case, for از جمله کاربردی ترین ساختارهای کنترلی است. اینکه هر کدام با چه شرایطی و چگونه استفاده و فراخوانی شود، ما در این آموزش به آن خواهیم پرداخت. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
ساختار تکرار for
تصور کنید میخواهید ۵۰ عدد را از ورودی دریافت و با استفاده از دستورات عملگری که یاد گرفتیم، یک عمل خاصی مانند جمع یا تفریق را روی آن ها انجام دهیم! یعنی ۵۰ بار باید تکرار کنیم! پس اصلا منطقی نیست! برای اینکار میتوانیم از ساختار تکرار 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 شود و مقدار صفر را برگرداند، حلقه پایان می یابد.
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 باشد و مقدار صفر ۰ برگرداند، حلقه تمام می شود.
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() { }
ساختار تصمیم 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
تصور کنید بخواهید یک منو با ال سی دی و آردوینو طراحی کنید. هر کلید یک نقش را ایفا میکند. اگر تعداد کلیدها افزایش پیدا کند، روند کدنویسی پیچیده و طولانی میشود. در این مرحله بهترین انتخاب استفاده از ساختار تصمیم switch است. برای Switch از حالت یا همان case استفاده میکنیم. ساختار Switch میتواند بدون default باشد. مقادیر case ها نمیتواند با هم مساوی باشد. اگر در یک case از دستور break استفاده نشود با مقدار case بعدی or میشود. تفاوت if , switch این است که در ساختار if میتوانید عبارت منطقی و رابطه ای را بررسی کنید و در ساختار switch فقط مساوی بودن مقادیر بررسی میشود.
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