Arduino/advanced io/pulseinlong

من موسوعة حسوب
< Arduino‏ | advanced io
مراجعة 10:53، 17 أكتوبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (أنشأ الصفحة ب'الدالة <code>pulseInLong()‎</code> هي دالةٌ بديلةٌ محسَّنةٌ للدالة <code>pulseIn()‎</code>، إذ يمكنها التعامل مع...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

الدالة pulseInLong()‎ هي دالةٌ بديلةٌ محسَّنةٌ للدالة pulseIn()‎، إذ يمكنها التعامل مع نبضات ومقاطعات طويلة متأثرة بحالات مختلفة.

تقرأ الدالة pulseInLong()‎ طول نبضةٍ (إمَّا HIGH أو LOW) على رجل محدَّدة. إن كانت مثلًا القيمة الممرَّرة إلى الدالة هي HIGH، فستنتظر تغيِّر حالة الرجل من LOW إلى HIGH لتبدأ حساب الوقت الذي تستغرقه الإشارة للعودة إلى الحالة LOW مجدَّدًا لتوقف المؤقت حينذاك؛ تعيد الدالة بعدئذٍ طول النبضة بواحدة الميكروثانية أو تستسلم وتعيد القيمة 0 بعد انتهاء المهلة الزمنية المحدَّدة إن لم تعثر على نبضة كاملة خلالها.

يحدَّد التوقيت في هذه الدالة بطريقة تجريبية ويحتمل أن يحمل أخطاءً في النبضات القصيرة. تعمل هذه الدالة مع النبضات التي يتراوح طولها من 10 ميكروثانية إلى 3 دقائق. يمكن استخدام هذا النمط (routine) إن فُعِّلَت المقاطعات فقط. أضف إلى ذلك أنَّه يمكن الحصول على أعلى دقَّة مع فترات كبيرة.

البنية العامة

pulseInLong(pin, value)

pulseInLong(pin, value, timeout)

المعاملات

pin

عددٌ صحيح يشير إلى الرجل المراد حساب طول النبضة المولَّدة عليها.

value

نوع النبضة المراد قراءتها لحساب طولها وتكون إمَّا HIGH أو LOW.

timeout

عددٌ طويلٌ عديم الإشارة (unsigned long) يحدِّد المهلة الزمنية بالميكروثانية التي ستنتظر الدالة خلالها بدء النبضة عند الحافة value. القيمة الافتراضية لهذا المعامل الاختياري هي: 1 ثانية.

القيم المعادة

يعاد عددٌ طويلٌ عديم الإشارة يمثِّل طول النبضة المولَّدة على الرجل pin بالميكروثانية، أو تعاد القيمة 0 إن لم تبدأ أيَّة نبضة عند الحافة value قبل انتهاء المهلة timeout الزمنية.

أمثلة

حساب زمن نبضة على الرجل 7 باستعمال الدالة pulseInLong()‎:

int pin = 7;
unsigned long duration;

void setup() {
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseInLong(pin, HIGH);
}

ملاحظات وتحذيرات

تعتمد هذه الدالة على الدالة micros()‎، لذا لا يمكن استعمالها في السياق noInterrupts()‎.

انظر أيضًا

مصادر

صفحة الدالة pulseinlong()‎ في توثيق أردوينو الرسمي.