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

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

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

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

 


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


تصور کنید میخواهید ۵۰ عدد را از ورودی دریافت و با استفاده از دستورات عملگری که یاد گرفتیم، یک عمل خاصی مانند جمع یا تفریق را روی آن ها انجام دهیم!  یعنی ۵۰ بار باید تکرار کنیم! پس اصلا منطقی نیست! برای اینکار میتوانیم از ساختار تکرار 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 شود و مقدار صفر را برگرداند، حلقه پایان می یابد.

ساختار تکرار 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 باشد و مقدار صفر ۰ برگرداند، حلقه تمام می شود.

 

 ساختار تکرار 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() {
}

 

 


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


تصور کنید بخواهید یک منو با ال سی دی و آردوینو طراحی کنید. هر کلید یک نقش را ایفا می‌کند. اگر تعداد کلیدها افزایش پیدا کند، روند کدنویسی پیچیده و طولانی می‌شود. در این مرحله بهترین انتخاب استفاده از ساختار تصمیم  switch است. برای Switch از حالت یا همان case استفاده می‌کنیم. ساختار Switch میتواند بدون default باشد. مقادیر case ها نمیتواند با هم مساوی باشد. اگر در یک case از دستور break استفاده نشود با مقدار case بعدی or می‌شود. تفاوت if , switch این است که در ساختار if میتوانید عبارت منطقی و رابطه ای را بررسی کنید و در ساختار switch فقط مساوی بودن مقادیر بررسی می‌شود.

ساختار تصمیم 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‌ را به بهترین شکل با شما در میان بگذارم.

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

۳۰ دیدگاه