استفاده از زمان در برنامهنویسی آردوینو، در آردوینو 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); }
امیدوارم این نوشته برایتان مفید باشد.
منبع: میکرودیزاینرالکترونیک