استفاده از زمان در برنامه نویسی آردوینو

در آردوینو 4 تابع برای بحث زمان وجود دارد که در ادامه در مورد آنها و کاربرد هریک توضیح خواهیم داد.

استفاده از زمان در برنامه نویسی آردوینو

این توابع عبارت اند از :

1- delay : استفاده از این تابع بسیار ساده است. کافی است یک عدد صحیح به عنوان ورودی به تابع داده شود که در واقع میزان تاخیر برحسب میلی ثانیه خواهد بود.
2- delayMicroseconds : استفاده از این تابع نیز مشابه delay() است. کافی است یک عدد صحیح به عنوان ورودی به تابع داده شود که در واقع میزان تاخیر برحسب میکرو ثانیه خواهد بود.
3- milis : از این تابع برای محاسبه مدت زمان گذشته شده از زمان اجرای برنامه برحسب میلی ثانیه استفاده می شود.
4- micros : از این تابع برای محاسبه مدت زمان گذشته شده از زمان اجرای برنامه برحسب میکرو ثانیه استفاده می شود. نکته مهمی که باید توجه داشته باشید این است که این تابع در صورتی که مدت زمان از 70 دقیقه بگذرد سرریز کرده و مجددا به صفر بازمیگردد.

تابع delay :

همان طور که پیش تر گفته شد استفاده از تابع delay بسیار ساده است. کافی است یک عدد یا متغیر صحیح به ورودی تابع برحسب میلی ثانیه بدهید. برنامه بر روی این تابع تا مدت زمان تعیین شده توسط این عدد منتظر می ماند و پس از گذر زمان تعیین شده خطوط بعدی برنامه اجرا خواهد شد. البته در نظر داشته باشید که استفاده از این تابع برای ایجاد تاخیر گزینه مناسبی نیست زیرا یک عامل ایجاد کننده مانع در برابر فرایند اجرای برنامه است.

مطلب پیشنهادی:  آرایه ها در برنامه نویسی آردوینو

دستور نوشتن تابع delay :

delay (ms) ;

که در این کد ms میزان تاخیر مورد نظر برحسب میلی ثانیه است. (یا یک متغیر از نوع unsigned long)

مثال :

/* Flashing LED
 * ------------
 * Turns on and off a light emitting diode(LED) connected to a digital
 * pin, in intervals of 2 seconds. *
*/

int ledPin = 13; // LED connected to digital pin 13

void setup() {
 pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop() {
 digitalWrite(ledPin, HIGH); // sets the LED on
 delay(1000); // waits for a second
 digitalWrite(ledPin, LOW); // sets the LED off
 delay(1000); // waits for a second
}

تابع delayMicrosecond :

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

دستور نوشتن تابع delayMicroseconds :

delayMicroseconds (us) ;

مطلب پیشنهادی:  تولید اعداد تصادفی در آردوینو

که در این کد us میزان تاخیر مورد نظر بر حسب میکروثانیه است. (یا متغیری از نوع unsigned int)
مثال :

/* Flashing LED
 * ------------
 * Turns on and off a light emitting diode(LED) connected to a digital
 * pin, in intervals of 1 seconds. *
*/

int ledPin = 13; // LED connected to digital pin 13

void setup() {
 pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop() {
 digitalWrite(ledPin, HIGH); // sets the LED on
 delayMicroseconds(1000); // waits for a second
 digitalWrite(ledPin, LOW); // sets the LED off
 delayMicroseconds(1000); // waits for a second
}

تابع millis

از این تابع برای محاسبه مدت زمان سپری شده از شروع اجرای برنامه برحسب میلی ثانیه استفاده می شود. عدد برگردانده شده توسط این تابع معمولا بعد از حدود 50 روز ریست شده و به صفر بازمی گردد.

دستور نوشتن تابع millis :

millis () ;

این تابع مقدار مدت زمان اجرای برنامه را برحسب میلی ثانیه بر میگرداند.
مثال :

unsigned long time; void setup() { 
 Serial.begin(9600); 
}

void loop() { 
 Serial.print("Time:"); time = millis();
 //prints time since program started
 Serial.println(time); 
 // wait a second so as not to send massive amounts of data
 delay(1000); 
}

تابع micros :
این تابع مشابه تابع millisاست با این تفاوت که مدت زمان محاسبه شده بر حسب میکرو ثانیه است و بعد از حدود سپری شدن حدود 70 دقیقه مجددا به صفر بازمی گردد. در بردهای آردوینو با فرکانس 16MHz ( مثلا بردهای Duemilanove و Nano) این تابع دارای دقت تا 4 میکروثانیه است (عدد خروجی مضاربی از عدد 4 است). در بردهای آردوینو با فرکانس 8MHz (مانند برد LilyPad) این تابع دارای دقت 8 میکروثانیه است.
دستور نوشتن تابع micros :

مطلب پیشنهادی:  توابع ورودی/خروجی پیشرفته آردوینو

micros () ;

این تابع مدت زمان سپری شده از شروع اجرای برنامه را برحسب میکروثانیه بازمیگرداند. (متغیر از نوع unsigned long)
مثال :

unsigned long time; void setup() { 
 Serial.begin(9600); 
}

void loop() { 
 Serial.print("Time:");
 time = micros(); //prints time since program started
 Serial.println(time); // wait a second so as not to send massive amounts of data
 delay(1000); 
}

دیگر جلسات این آموزش

درباره ی محمد حسین کوهی قمصری

دانشجوی کارشناسی برق گرایش الکترونیک

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

3 دیدگاه

  1. اگه یکم مطلب بیشتری در رابطه با اردوینو بزارین خیلی خوب میشه

  2. سلام. ما یه برنامه نوشتیم برای راه اندازی موتور که با حلقه forانجام میشه .یجایی تو برنامه از تابع microsاستفاده کردیم ولی چون حلقه for ما سریع اجرا میشه هر delay یا چیزی که میذاریم این تابعمون رو خراب میکنه و کلا شکل موج ها بهم میریزه.شما نظری دارین در این مورد؟

    • سلام، برنامه را باید دقیق دید و نظر داد ولی شما اگر داخل حلقه خروجی DAC را آپدیت میکنید باید متناسب با سرعت DAC باشد. و تعداد نقاط آرایه شکل موج و… هم باید لحاظ بشن.