توضیحات
pulseInLong() جایگزینی برای pulseIn() است که در کنترل پالس طولانی و قطع سناریوهای آسیب دیده بهتر است.
یک پالس را (بالا یا پایین) روی پین مورد نظر می خواند. به عنوان مثال ، اگر مقدار HIGH باشد ، pulseInLong() منتظر می ماند تا پین از LOW به HIGH برود ، سپس شروع به شمردن می کند ، سپس منتظر می ماند که پین LOW شود و شمردن را متوقف می کند. طول پالس بر حسب میکروثانیه در خروجی داده می شود یا اگر پالس کاملی دریافت نشود ، مقدار 0 را برمی گرداند .
دستور pulseln() ممکن است در اندازه گیری های کوتاهتر دارای خطا باشد. محدوده مناسب برای این دستور از 10 میکروثانیه تا 3 دقیقه است. این روال فقط در صورت فعال شدن وقفه ها قابل استفاده است. علاوه بر این بالاترین وضوح با فواصل زیاد به دست می آید.
نکته : در صورت استفاده از timeout اختیاری ، کد سریعتر اجرا می شود.
نحوه استفاده
pulseInLong(pin, value)
pulseInLong(pin, value, timeout)
- pin: پینی که قرار است پالس دریافت کنیم. داده از نوع int است.
- value: نوع پالس برای خواندن (HIGH یا LOW) داده از نوع int است.
- timeout (اختیاری): زمانی (برحسب میکروثانیه) که باید برای پالس منتظر بمانیم. به طور پیشفرض 1 ثانیه است. داده از نوع unsigned long است.
خروجی تابع
طول پالس (برحسب میکروثانیه) یا در صورتی که پالسی قبل از اتمام زمان (timeout) شروع نشود مقدار 0 را برمی گرداند.
مثال
مدت زمان پالس را روی پین 7 چاپ می کند.
int pin = 7;
unsigned long duration;
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT); // پین 7 به عنوان ورودی
}
void loop() {
duration = pulseInLong(pin, HIGH); // اندازه گیری طول بالا شدن پین 7
Serial.println(duration); // نمایش در سریال مانیتور
}
نکات مهم
این عملکرد به micros() متکی است ، بنابراین نمی توان از آن در زمینه noInterrupts() استفاده کرد.