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

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

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

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

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

تابع delay :

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

مطلب پیشنهادی:  آموزش راه اندازی ماژول +nRF24L01

دستور نوشتن تابع 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); 
}

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

6 دیدگاه

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

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

  3. ببخشید من میخوام سرعت سروو موتورم رو تنظیم کنم سرعتش زیاده میخوام کم کنم اونم زدون پپتانسیومتر تازه کارم هستم راهنمایی ام کنید

  4. سلام ممنون میشم کمکم کنید
    بنده می خوام با برد آردوینو UNO R3 تایمر درست کنم که دو زمان متفاوت رو بهش بدیم و دو رله رو در دو زمان جدای از هم روشن و خاموش کنه .از فرمان delay استفاده میکنم اما ابتدا تایمر اول زمانگیری میکنه بعد خاموش میشه تازه تایمر دوم میاد تو مدار و تا زمانی که تایمر دوم زمانگیری توم نشده تایمر اول نمیاد تو مدار . با فرمان delay میشه این کار رو کرد یا نه . اگه نمیشه با فرمان millis اگه میشه برنامشو برام بنویسید و در سایت قرار بدین . ممنون میشم کمکم کنید .

  5. مهندس ایا استفاده از delayبرای ایجاد تاخیر های طولانی امکان پذیره یا خیر؟ لطفا راهنمایی کنید