در آردوینو 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); }
دیگر جلسات این آموزش
- بردهای آردوینو Arduino
- آموزش آردوینو
- قطعات و اجزای بردهای آردوینو
- نصب آردوینو
- راه اندازی برد اردینو
- ساختار برنامه آردوینو
- انواع داده در آردوینو
- مفهوم حوزه متغیر در آردوینو-متغیرهای محلی و متغیرهای سراسری
- برنامه نویسی آردوینو – عملگرها
- برنامهنویسی آردوینو–ساختارهای کنترلی
- آردوینو – حلقه ها در برنامه نویسی
- برنامه نویسی آردوینو – توابع
- رشته ها در برنامه نویسی آردوینو
- استفاده از زمان در برنامه نویسی آردوینو
- آرایه ها در برنامه نویسی آردوینو
- توابع ورودی/خروجی در آردوینو
- ارسال آرایه ها به توابع
- کتابخانه توابع ریاضی در آردوینو
- آرایه های چند بعدی در آردوینو
- بردهای آردوینو Due و Zero
- آردوینو – توابع مثلثاتی
- مدولاسیون عرض پالس یا PWM در آردوینو
- تولید اعداد تصادفی در آردوینو
- آردوینو – توابع کاراکتری
- توابع ورودی/خروجی پیشرفته آردوینو
- پروتکل های ارتباطی در آردوینو
- راه اندازی I2C در آردوینو
- راه اندازی SPI در آردوینو
- پروتکل ارتباطی USART در آردوینو
- آشنایی با زبان های برنامه نویسی آردوینو
- آموزش پروگرام کردن برد های آردوینو
- وقفه ها در آردوینو
- پروتکل I2C در آردوینو
- پروتکل رابطه وسایل جانبی در آردوینو (SPI)
اگه یکم مطلب بیشتری در رابطه با اردوینو بزارین خیلی خوب میشه
سلام. ما یه برنامه نوشتیم برای راه اندازی موتور که با حلقه forانجام میشه .یجایی تو برنامه از تابع microsاستفاده کردیم ولی چون حلقه for ما سریع اجرا میشه هر delay یا چیزی که میذاریم این تابعمون رو خراب میکنه و کلا شکل موج ها بهم میریزه.شما نظری دارین در این مورد؟
سلام، برنامه را باید دقیق دید و نظر داد ولی شما اگر داخل حلقه خروجی DAC را آپدیت میکنید باید متناسب با سرعت DAC باشد. و تعداد نقاط آرایه شکل موج و… هم باید لحاظ بشن.