توابع پایه مربوط به زمان و وقفه در آردوینو

در این جلسه می‌خواهیم در مورد توابع پایه مربوط به زمان و وقفه که پیوسته در IDE آردوینو به کار بسته می‌شوند صحبت کنیم.

توابع پایه مربوط به زمان و وقفه در آردوینو

توابع زمانی

تابع ()millis

  • این تابع تعداد میلی‌ثانیه‌های سپری شده از زمانی که بورد آردوینو شروع به اجرای برنامه جاری کرده است را برمی‌گرداند.
  • این عدد تقریباً بعد از ۵۰ روز سرریز می‌کند. (دوباره صفر می‌شود)
  • مقدار برگردانده شده از نوع unsigned long int می‌باشد.
  • مثال unsigned long time
    ()time = millis

تابع ()micros

  • این تابع تعداد میکروثانیه‌های سپری شده از زمانی که بورد آردوینو شروع به اجرای برنامه جاری کرده است را برمی‌گرداند.
  • این عدد تقریباً بعد از ۷۰ دقیقه سرریز می‌کند. (دوباره صفر می‌شود)
  • مقدار برگردانده شده از نوع unsigned long int می‌باشد.
  • مثال unsigned long time
    ()time = micros

 تابع (delay(value

  • Value: تعداد میلی ثانیه‌هایی که می‌خواهیم برنامه متوقف شود.
  • این تابع برنامه را به تعداد میلی‌ثانیه مشخص متوقف می‌کند.

تابع (delayMicroseconds(value

  • Value: تعداد میکرو ثانیه‌هایی که می‌خواهیم برنامه متوقف شود.
  • این تابع برنامه را به تعداد میکروثانیه مشخص متوقف می‌کند.

چاپ زمان سپری شده به میلی ثانیه و میکروثانیه روی مانیتور سریال آردوینو از زمان روشن شدن آن

/* Printing time elapsed in microseconds and milliseconds on the serial monitor of Arduino from the time the Arduino is powered on */


unsigned long time_value;

/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{
  pinMode(13, OUTPUT); /* Pin 13 is defined as Output */
  Serial.begin(9600); /* opens serial port, sets data rate to 9600 bps */
}

/* Loop runs over and over after the startup function */
void loop()
{
  digitalWrite(13, HIGH); /* Make pin 13 HIGH */
  delay(2000); /* Wait for 2 seconds */
  digitalWrite(13, LOW);
  delayMicroseconds(100); /* Wait for 100 microseconds */
  Serial.print("Time passed since power on in milliseconds:");
  time_value = millis(); /* Read value of number of microseconds since program started executing */
  Serial.println(time_value);
  delay(2000);
  Serial.print("Time passed since power on in microseconds:");
  time_value = micros(); /* Read value of number of milliseconds since program started executing */
  Serial.println(time_value); 
  delay(1000);
}

توابع وقفه

  1. تابع ()interrupts 
  • این تابع وقفه‌ها را پس از اینکه توسط تابع ()noInterrupts غیرفعال شدند، مجدداً فعال می‌کند.
  1. تابع ()noInterrupts
  • این تابع وقفه‌ها را غیرفعال می‌کند.
  • وقفه‌ها را می‌توان با تابع ()interrupts مجدداً فعال کرد.
  1. تابع (attachInterrupt(digitalPinToInterrupt(pin), ISR, mode
  • اولین پارامتر برای attatchInteerupt، شماره پین است.
  • باید از digitalPinToInterrupt(pin) برای مشخص کردن منبع وقفه‌ی خارجی استفاده کرد.
  • Pin: شماره پینی است که می‌خواهیم برای آن قابلیت وقفه‌ی خارجی را فعال کنیم.
مطلب پیشنهادی:  آردوینو – توابع مثلثاتی

برای آردوینو UNO، تنها پین‌های ۲ و ۳ چنین قابلیتی را دارند.

  • ISR: زمان وقوع رویداد وقفه، TSR فراخوانی می‌شود. این تابع هیچ پارامتر ورودی نداشته و چیزی برنمی‌گرداند.
  • Mode: مشخص می‌کند که چه رویدادی باید منجر به وقفه شود. ۴ گزینه برای انتخاب وجود دارد.
    1. LOW: وقتی پین LOW شود، وقفه رخ می‌دهد.
    2. CHANGE: وقتی مقدار پین تغییر کند، وقفه رخ می‌دهد.
    3. FALLING: وقتی مقدار پین از HIGH به LOW برود، وقفه رخ می‌دهد.
    4. RISING: وقتی مقدار پین از LOW به HIGH برود، وقفه رخ می‌دهد.
  1. تابع ((detachInterrupt(digitalPinToInterrupt(pin
  • وقفه ای که توسط تابع (digitalPinToInterrupt(pin مشخص شده را خاموش می‌کند.

خاموش و روشن کردن وقفه‌ها

/* Interrupt Functions */


/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{

}

/* Loop runs over and over after the startup function */
void loop()
{
  noInterrupts();
  /* critical, time-sensitive code here */
  interrupts();
  /* other code here */
}

خاموش و روشن کردن LED متصل به پین ۱۳ آردوینو با استفاده از رویداد وقفه روی پین ۲ آردوینو. یک کلید لمسی برای ایجاد وقفه به کار رفته است.

/* Toggling LED connected to pin 13 of Arduino using interrupt events on pin 2 of Arduino. A tactile switch is used to cause the interrupt events. */


volatile bool led_state = LOW;

/* Setup is run once at the start (Power-On or Reset) of sketch */
void setup()
{
  pinMode(13, OUTPUT); /* Pin 13 is defined as Output */
  pinMode(2, INPUT_PULLUP); /* Interrupt pin */
  /* Connect pin 2 to ground using a tactile switch between the pin and ground */
  attachInterrupt(digitalPinToInterrupt(2), blink, FALLING); /* Call ISR blink whenever a falling edge event is detected on pin 2 */
  /* Press switch to cause falling edge event on the pin */
}

/* Loop runs over and over after the startup function */
void loop()
{
  digitalWrite(13, led_state); /* Write state value to pin 13 which has on-board LED */
}

/* ISR */
void blink() {
  led_state = !led_state; /* Toggle state value of LED */
}

منبع: ترجمه از سایت electronicwings.com

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

امیدواریم این آموزش برای شما مفید واقع شده باشه. توصیه می‌کنیم مطالب پروژه‌های آردوینو را نیز مطالعه کنید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید و ما را نیز دعا کنید. همچنین دوست داشتین اپلیکیشن اندویدی ما را هم نصب کنید.

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

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

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