در این جلسه میخواهیم در مورد توابع پایه مربوط به زمان و وقفه که پیوسته در 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); }
توابع وقفه
- تابع ()interrupts
- این تابع وقفهها را پس از اینکه توسط تابع ()noInterrupts غیرفعال شدند، مجدداً فعال میکند.
- تابع ()noInterrupts
- این تابع وقفهها را غیرفعال میکند.
- وقفهها را میتوان با تابع ()interrupts مجدداً فعال کرد.
- تابع (attachInterrupt(digitalPinToInterrupt(pin), ISR, mode
- اولین پارامتر برای attatchInteerupt، شماره پین است.
- باید از digitalPinToInterrupt(pin) برای مشخص کردن منبع وقفهی خارجی استفاده کرد.
- Pin: شماره پینی است که میخواهیم برای آن قابلیت وقفهی خارجی را فعال کنیم.
برای آردوینو UNO، تنها پینهای ۲ و ۳ چنین قابلیتی را دارند.
- ISR: زمان وقوع رویداد وقفه، TSR فراخوانی میشود. این تابع هیچ پارامتر ورودی نداشته و چیزی برنمیگرداند.
- Mode: مشخص میکند که چه رویدادی باید منجر به وقفه شود. ۴ گزینه برای انتخاب وجود دارد.
- LOW: وقتی پین LOW شود، وقفه رخ میدهد.
- CHANGE: وقتی مقدار پین تغییر کند، وقفه رخ میدهد.
- FALLING: وقتی مقدار پین از HIGH به LOW برود، وقفه رخ میدهد.
- RISING: وقتی مقدار پین از LOW به HIGH برود، وقفه رخ میدهد.
- تابع ((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
امیدواریم این آموزش برای شما مفید واقع شده باشه. توصیه میکنیم مطالب پروژههای آردوینو را نیز مطالعه کنید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.