آردوینو آموزش آردوینو

آموزش آردوینو – بخش ششم ساختارهای کنترلی در برنامه نویسی آردوینو

arduino-basic-tutorial-part-six-control-structures-digispark
نوشته شده توسط پریسا پوربلورچیان

شرط نویسی برای سنسورها در واقع مسیر به آن ها میدهد. دستورات برنامه نویسی مهمی مثل if else, switch case, for از جمله کاربردی ترین ساختارهای کنترلی است. اینکه هر کدام با چه شرایطی و چگونه استفاده و فراخوانی شود، ما در این آموزش به آن خواهیم پرداخت. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


ساختار تکرار for


در برنامه‌نویسی C++، ساختار تکرار for برای اجرای یک بلاک کد با مشخص بودن تعداد دفعات تکرار استفاده می‌شود.

  • اعلان و مقداردهی اولیه (Initialization): در این بخش، شما متغیرها را اعلان و مقداردهی اولیه می‌کنید. این بخش فقط یک بار اجرا می‌شود.
  • شرط ادامه (Condition): در این بخش، یک شرط تعیین می‌کنید که تا زمانی که این شرط درست باشد، حلقه for ادامه می‌یابد. اگر این شرط نادرست باشد، حلقه متوقف می‌شود.
  • اعمال پس از هر دور (Update): در این بخش، شما می‌توانید مقادیر متغیرها را به روز کنید. این بخش معمولاً برای افزایش یا کاهش متغیرهای مشارکتی (مانند شمارنده) استفاده می‌شود.

ساختار کلی for به صورت زیر است:

for (Initialization; Condition; Update) {
// بلاک کدی که تکرار می‌شود
}

تصور کنید میخواهید ۵۰ عدد را از ورودی دریافت و با استفاده از دستورات عملگری که یاد گرفتیم، یک عمل خاصی مانند جمع یا تفریق را روی آن ها انجام دهیم!  یعنی ۵۰ بار باید تکرار کنیم! پس اصلا منطقی نیست! برای اینکار میتوانیم از ساختار تکرار for استفاده کنیم. ساختار تکرار for برای ساخت حلقه است و معمولا در حالتی که تعداد دفعات تکرار حلقه از قبل مشخص باشد، از آن استفاده می‌کنیم.

ساختار تکرار for در برنامه نویسی آردوینو - دیجی اسپارک

 

  •  متغیر شمارنده تعداد دفعات تکرار حلقه را کنترل می‌کند.
  • مقدار اولیه در برنامه در هر بار اجرای دستورات ، مقداری به آن اضافه می‌شود.
  • این افزایش مقدار توسط گام حرکت مشخص می‌شود.
  • گام حرکت میتواند عدد مثبت، منفی و اعشاری باشد.
  • شرط حلقه مشخص می‌کند که دستورات داخل حلقه تا چه زمانی باید اجرا شود.
  • اگر شرطی که مینویسیم دارای ارزش درستی True باشد، دستورات اجرا می‌شود.
  • در غیر اینصورت کنترل برنامه از حلقه تکرار خارج می‌شود.
for  (i = 1; i<10; i++)

 

ساختار تکرار for در برنامه نویسی آردوینو - دیجی اسپارک

 


نمونه برنامه استفاده از 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 در برنامه نویس آردوینو - دیجی اسپارک

 

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 ... 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 در برنامه نویسی آردوینو - دیجی اسپارک

 

روش دوم فراخوانی

روش دوم ساختار تصمیم 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 (متغیر یا عبارت) {
    case مقدار۱:
        // بلاک کد برای مقدار۱
        break;
    case مقدار۲:
        // بلاک کد برای مقدار۲
        break;
    // …
    default:
        // بلاک کد پیش فرض (اگر هیچکدام از مقادیر با مقدار switch مطابقت نداشته باشد)
}
توضیحات:
switch ابتدا عبارت یا متغیر را ارزیابی می‌کند و سپس مقدار آن را با مقادیر case ها مقایسه می‌کند.
اگر مقدار عبارت یا متغیر با یکی از مقادیر case ها مطابقت داشته باشد، بلاک کد مربوط به آن case اجرا می‌شود.
break برای پایان دادن به حلقه switch استفاده می‌شود و جلوگیری می‌کند که بلاک کد case های دیگر نیز اجرا شود.
اگر هیچکدام از case ها با مقدار switch مطابقت نداشته باشد، بلاک کد default اجرا می‌شود (اختیاری).

ساختار تصمیم 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;
  }
}

 


جمع بندی


در حالت عادی با یک دستور ورودی و خروجی در حلقه ی برنامه دستورات از اول به آخر اجرا می‌شود. حال اگر بخواهیم شرط نویسی کنیم یعنی دستورات تحت شرایط خاصی اجرا و بعضی دیگر اجرا نشود نیاز به ساختارهای کنترلی داریم. ساختار کنترلی در حالت عادی به دو دسته تقسیم می‌شود ساختار تکرار و ساختار تصمیم در برنامه نویسی که از مهم ترین و پایه ترین دستورات در آردوینو است. ساختار تکرار برای تکرار اجرای دستورات و ساختار تصمیم برای بررسی شرایطی در برنامه و تصمیم گیری بر اساس آن شرط در کدنویسی آردوینو فراخوانی می‌شود.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۳۴ دیدگاه