در آردوینو 4 تابع برای بحث زمان وجود دارد که در ادامه در مورد آنها و کاربرد هریک توضیح خواهیم داد.
این توابع عبارت اند از :
1- delay : استفاده از این تابع بسیار ساده است. کافی است یک عدد صحیح به عنوان ورودی به تابع داده شود که در واقع میزان تاخیر برحسب میلی ثانیه خواهد بود.
2- delayMicroseconds : استفاده از این تابع نیز مشابه delay() است. کافی است یک عدد صحیح به عنوان ورودی به تابع داده شود که در واقع میزان تاخیر برحسب میکرو ثانیه خواهد بود.
3- milis : از این تابع برای محاسبه مدت زمان گذشته شده از زمان اجرای برنامه برحسب میلی ثانیه استفاده می شود.
4- micros : از این تابع برای محاسبه مدت زمان گذشته شده از زمان اجرای برنامه برحسب میکرو ثانیه استفاده می شود. نکته مهمی که باید توجه داشته باشید این است که این تابع در صورتی که مدت زمان از 70 دقیقه بگذرد سرریز کرده و مجددا به صفر بازمیگردد.
تابع delay :
همان طور که پیش تر گفته شد استفاده از تابع delay بسیار ساده است. کافی است یک عدد یا متغیر صحیح به ورودی تابع برحسب میلی ثانیه بدهید. برنامه بر روی این تابع تا مدت زمان تعیین شده توسط این عدد منتظر می ماند و پس از گذر زمان تعیین شده خطوط بعدی برنامه اجرا خواهد شد. البته در نظر داشته باشید که استفاده از این تابع برای ایجاد تاخیر گزینه مناسبی نیست زیرا یک عامل ایجاد کننده مانع در برابر فرایند اجرای برنامه است.
دستور نوشتن تابع delay :
delay (ms) ;
که در این کد ms میزان تاخیر مورد نظر برحسب میلی ثانیه است. (یا یک متغیر از نوع unsigned long)
جلسات قبلی آموزش آردوینو
- بردهای آردوینو Arduino
- آموزش آردوینو
- قطعات و اجزای بردهای آردوینو
- نصب آردوینو
- ساختار برنامه آردوینو
- انواع داده در آردوینو
- مفهوم حوزه متغیر در آردوینو-متغیرهای محلی و متغیرهای سراسری
- برنامه نویسی آردوینو – عملگرها
- برنامهنویسی آردوینو–ساختارهای کنترلی
- آردوینو – حلقه ها در برنامه نویسی
- برنامه نویسی آردوینو – توابع
- رشته ها در برنامه نویسی آردوینو
مثال :
/* 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); }
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
اگه یکم مطلب بیشتری در رابطه با اردوینو بزارین خیلی خوب میشه
سلام. ما یه برنامه نوشتیم برای راه اندازی موتور که با حلقه forانجام میشه .یجایی تو برنامه از تابع microsاستفاده کردیم ولی چون حلقه for ما سریع اجرا میشه هر delay یا چیزی که میذاریم این تابعمون رو خراب میکنه و کلا شکل موج ها بهم میریزه.شما نظری دارین در این مورد؟
سلام، برنامه را باید دقیق دید و نظر داد ولی شما اگر داخل حلقه خروجی DAC را آپدیت میکنید باید متناسب با سرعت DAC باشد. و تعداد نقاط آرایه شکل موج و… هم باید لحاظ بشن.
ببخشید من میخوام سرعت سروو موتورم رو تنظیم کنم سرعتش زیاده میخوام کم کنم اونم زدون پپتانسیومتر تازه کارم هستم راهنمایی ام کنید
سلام ممنون میشم کمکم کنید
بنده می خوام با برد آردوینو UNO R3 تایمر درست کنم که دو زمان متفاوت رو بهش بدیم و دو رله رو در دو زمان جدای از هم روشن و خاموش کنه .از فرمان delay استفاده میکنم اما ابتدا تایمر اول زمانگیری میکنه بعد خاموش میشه تازه تایمر دوم میاد تو مدار و تا زمانی که تایمر دوم زمانگیری توم نشده تایمر اول نمیاد تو مدار . با فرمان delay میشه این کار رو کرد یا نه . اگه نمیشه با فرمان millis اگه میشه برنامشو برام بنویسید و در سایت قرار بدین . ممنون میشم کمکم کنید .
مهندس ایا استفاده از delayبرای ایجاد تاخیر های طولانی امکان پذیره یا خیر؟ لطفا راهنمایی کنید