Advanced I/O - پیشرفته

pulseInLong – ایجاد پالس

pulseInLong - ایجاد پالس

توضیحات

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()  استفاده کرد.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد.