الفرق بين المراجعتين لصفحة: «Arduino/advanced io/pulseinlong»
جميل-بيلوني (نقاش | مساهمات) أنشأ الصفحة ب'الدالة <code>pulseInLong()</code> هي دالةٌ بديلةٌ محسَّنةٌ للدالة <code>pulseIn()</code>، إذ يمكنها التعامل مع...' |
جميل-بيلوني (نقاش | مساهمات) إضافة محتويات الصفحة. |
||
سطر 1: | سطر 1: | ||
الدالة <code>pulseInLong()</code> هي دالةٌ بديلةٌ محسَّنةٌ للدالة <code>pulseIn()</code>، إذ يمكنها التعامل مع نبضات ومقاطعات طويلة متأثرة بحالات مختلفة. | <noinclude>{{DISPLAYTITLE:الدالة <code>pulseInLong()</code> في أردوينو}}</noinclude> | ||
الدالة <code>pulseInLong()</code> هي دالةٌ بديلةٌ محسَّنةٌ للدالة <code>[[Arduino/advanced io/pulsein|pulseIn()]]</code>، إذ يمكنها التعامل مع نبضات ومقاطعات طويلة متأثرة بحالات مختلفة. | |||
تقرأ الدالة <code>pulseInLong()</code> طول نبضةٍ (إمَّا <code>HIGH</code> أو <code>LOW</code>) على رجل محدَّدة. إن كانت مثلًا القيمة الممرَّرة إلى الدالة هي <code>HIGH</code>، فستنتظر تغيِّر حالة الرجل من <code>LOW</code> إلى <code>HIGH</code> لتبدأ حساب الوقت الذي تستغرقه الإشارة للعودة إلى الحالة <code>LOW</code> مجدَّدًا | تقرأ الدالة <code>pulseInLong()</code> طول نبضةٍ (إمَّا <code>HIGH</code> أو <code>LOW</code>) على رجل محدَّدة. إن كانت مثلًا القيمة الممرَّرة إلى الدالة هي <code>HIGH</code>، فستنتظر تغيِّر حالة الرجل من <code>LOW</code> إلى <code>HIGH</code> لتبدأ حساب الوقت الذي تستغرقه الإشارة للعودة إلى الحالة <code>LOW</code> مجدَّدًا لتُوقِف المؤقت حينذاك؛ تعيد الدالة بعدئذٍ طول النبضة بواحدة الميكروثانية أو تستسلم وتعيد القيمة 0 بعد انتهاء المهلة الزمنية المحدَّدة إن لم تعثر على نبضة كاملة خلالها. | ||
يحدَّد التوقيت في هذه الدالة بطريقة تجريبية ويحتمل أن يحمل أخطاءً في النبضات القصيرة. تعمل هذه الدالة مع النبضات التي يتراوح طولها من 10 ميكروثانية إلى 3 دقائق. يمكن استخدام هذا النمط (routine) إن فُعِّلَت المقاطعات فقط. أضف إلى ذلك أنَّه يمكن الحصول على أعلى دقَّة مع فترات كبيرة. | يحدَّد التوقيت في هذه الدالة بطريقة تجريبية ويحتمل أن يحمل أخطاءً في النبضات القصيرة. تعمل هذه الدالة مع النبضات التي يتراوح طولها من 10 ميكروثانية إلى 3 دقائق. يمكن استخدام هذا النمط (routine) إن فُعِّلَت المقاطعات فقط. أضف إلى ذلك أنَّه يمكن الحصول على أعلى دقَّة مع فترات كبيرة. | ||
==البنية العامة== | |||
== البنية العامة == | |||
<syntaxhighlight lang="arduino"> | <syntaxhighlight lang="arduino"> | ||
pulseInLong(pin, value) | pulseInLong(pin, value) | ||
سطر 11: | سطر 11: | ||
pulseInLong(pin, value, timeout) | pulseInLong(pin, value, timeout) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==المعاملات== | |||
== المعاملات == | ===<code>pin</code>=== | ||
=== <code>pin</code> === | |||
عددٌ صحيح يشير إلى الرجل المراد حساب طول النبضة المولَّدة عليها. | عددٌ صحيح يشير إلى الرجل المراد حساب طول النبضة المولَّدة عليها. | ||
===<code>value</code>=== | |||
=== <code>value</code> === | |||
نوع النبضة المراد قراءتها لحساب طولها وتكون إمَّا <code>HIGH</code> أو <code>LOW</code>. | نوع النبضة المراد قراءتها لحساب طولها وتكون إمَّا <code>HIGH</code> أو <code>LOW</code>. | ||
===<code>timeout</code>=== | |||
=== <code>timeout</code> === | |||
[[Arduino/long|عددٌ طويلٌ عديم الإشارة]] (unsigned long) يحدِّد المهلة الزمنية بالميكروثانية التي ستنتظر الدالة خلالها بدء النبضة عند الحافة <code>value</code>. القيمة الافتراضية لهذا المعامل الاختياري هي: 1 ثانية. | [[Arduino/long|عددٌ طويلٌ عديم الإشارة]] (unsigned long) يحدِّد المهلة الزمنية بالميكروثانية التي ستنتظر الدالة خلالها بدء النبضة عند الحافة <code>value</code>. القيمة الافتراضية لهذا المعامل الاختياري هي: 1 ثانية. | ||
==القيم المعادة== | |||
== القيم المعادة == | |||
يعاد [[Arduino/long|عددٌ طويلٌ عديم الإشارة]] يمثِّل طول النبضة المولَّدة على الرجل <code>pin</code> بالميكروثانية، أو تعاد القيمة 0 إن لم تبدأ أيَّة نبضة عند الحافة <code>value</code> قبل انتهاء المهلة <code>timeout</code> الزمنية. | يعاد [[Arduino/long|عددٌ طويلٌ عديم الإشارة]] يمثِّل طول النبضة المولَّدة على الرجل <code>pin</code> بالميكروثانية، أو تعاد القيمة 0 إن لم تبدأ أيَّة نبضة عند الحافة <code>value</code> قبل انتهاء المهلة <code>timeout</code> الزمنية. | ||
==أمثلة== | |||
== أمثلة == | |||
حساب زمن نبضة على الرجل 7 باستعمال الدالة <code>pulseInLong()</code>:<syntaxhighlight lang="arduino"> | حساب زمن نبضة على الرجل 7 باستعمال الدالة <code>pulseInLong()</code>:<syntaxhighlight lang="arduino"> | ||
int pin = 7; | int pin = 7; | ||
سطر 39: | سطر 33: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==ملاحظات وتحذيرات== | |||
== ملاحظات وتحذيرات == | |||
تعتمد هذه الدالة على الدالة <code>[[Arduino/time/micros|micros()]]</code>، لذا لا يمكن استعمالها في السياق <code>[[Arduino/interrupts/nointerrupts|noInterrupts()]]</code>. | تعتمد هذه الدالة على الدالة <code>[[Arduino/time/micros|micros()]]</code>، لذا لا يمكن استعمالها في السياق <code>[[Arduino/interrupts/nointerrupts|noInterrupts()]]</code>. | ||
==انظر أيضًا== | |||
* الدالة <code>[[Arduino/advanced io/notone|noTone()]]</code>: توقف توليد موجةٍ مربَّعةٍ على رجل معيَّنة أُنشئَت باستعمال الدالة <code>[[Arduino/advanced io/tone|tone()]]</code>. | |||
* الدالة <code>[[Arduino/advanced io/pulsein|pulseIn()]]</code>: تحسب طول نبضةٍ (إمَّا <code>HIGH</code> أو <code>LOW</code>) على رجل محدَّدة. | |||
* الدالة <code>[[Arduino/advanced io/shiftin|shiftIn()]]</code>: تزيح بايتًا من البيانات من رجل محدَّدة إلى متغيِّر مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى <code>HIGH</code>. | |||
* الدالة <code>[[Arduino/advanced io/shiftout|shiftOut()]]</code>: تزيح بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلى <code>HIGH</code>. | |||
* الدالة <code>[[Arduino/advanced io/tone|tone()]]</code>: تولِّد موجةً مربَّعةً بتردد محدَّد (وبنسبة 50% لدورة العمل [duty cycle]) على رجل معيَّنة. | |||
==مصادر== | |||
== مصادر == | |||
[https://www.arduino.cc/reference/en/language/functions/advanced-io/pulseinlong/ صفحة الدالة pulseinlong() في توثيق أردوينو الرسمي.] | [https://www.arduino.cc/reference/en/language/functions/advanced-io/pulseinlong/ صفحة الدالة pulseinlong() في توثيق أردوينو الرسمي.] | ||
[[تصنيف: Arduino]] | |||
[[تصنيف: Arduino Function]] | |||
[[تصنيف: Arduino I/O]] | |||
[[تصنيف: Arduino Advanced I/O]] |
مراجعة 14:58، 17 أكتوبر 2018
الدالة 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()
.
انظر أيضًا
- الدالة
noTone()
: توقف توليد موجةٍ مربَّعةٍ على رجل معيَّنة أُنشئَت باستعمال الدالةtone()
. - الدالة
pulseIn()
: تحسب طول نبضةٍ (إمَّاHIGH
أوLOW
) على رجل محدَّدة. - الدالة
shiftIn()
: تزيح بايتًا من البيانات من رجل محدَّدة إلى متغيِّر مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلىHIGH
. - الدالة
shiftOut()
: تزيح بايتًا من البيانات إلى رجل محدَّدة مقدار بتٍّ واحدٍ في كل مرة تتغير فيها حالة النبضة على رجل أخرى إلىHIGH
. - الدالة
tone()
: تولِّد موجةً مربَّعةً بتردد محدَّد (وبنسبة 50% لدورة العمل [duty cycle]) على رجل معيَّنة.