Arduino & IoT Academy · درس

إزالة ارتداد الإشارة باستخدام millis()

تجاهل التشويش عبر نافذة استقرار قصيرة.

الدرس 2 من 413 خطوة

إزالة ارتداد الإشارة باستخدام millis() درس مجاني في Arduino & IoT Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Arduino & IoT Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Arduino & IoT Academy 4 دروس في المجموع.

لماذا لا نستخدم delay() فقط؟

يمكنك التوقف باستخدام delay() بعد الضغط، لكن ذلك يجمّد اللوحة بأكملها. والأداة الأذكى لتنظيف إشارات الأزرار هي millis().

millis() ساعة إيقاف

تعيد millis() عدد الميليثواني منذ بدء تشغيل اللوحة. قارن بين قراءتين لقياس الزمن المنقضي دون إيقاف التنفيذ.

unsigned long now = millis();

خطة إزالة الارتداد

الفكرة بسيطة: عند تغير الطرف، ابدأ مؤقتًا. ولا تثق بالحالة الجديدة إلا إذا بقيت ثابتة طوال فترة قصيرة.

اختيار فترة إزالة الارتداد

يُعد تأخير مدته نحو 50 ميليثانية خيارًا شائعًا. فهو طويل بما يكفي لتجاوز الارتداد، وسريع جدًا بحيث لا تلاحظه.

const unsigned long DEBOUNCE = 50;

تذكّر آخر تغير

تحتاج إلى متغير يخزن متى انقلب الطرف آخر مرة. قارنه بالوقت الحالي في كل دورة للحلقة.

unsigned long lastChange = 0;

تتبع حالتين

احتفظ بـالقراءة الأولية والحالة المستقرة المؤكدة كل منهما على حدة. فالأولى مشوشة، أما الثانية فهي التي يثق بها منطقك.

int lastRaw = HIGH;
int stable = HIGH;

اكتشاف التبدل

اقرأ الطرف في كل دورة. فإذا اختلف عن القيمة الأولية السابقة، فهذا يعني أن الإشارة تحركت للتو، لذا أعد ضبط المؤقت.

int raw = digitalRead(BTN);
if (raw != lastRaw)
  lastChange = millis();

انتظر الاستقرار

إذا مر وقت كافٍ منذ آخر تبدل، تكون القراءة قد استقرت. عندها يصبح من الآمن قبولها بوصفها الحالة الفعلية.

if (millis() - lastChange > DEBOUNCE) {
  stable = raw;
}

التصرف عند الحافة

للتشغيل مرة واحدة لكل ضغطة، راقب تغير الحالة المستقرة إلى LOW. تلك الحافة المفردة هي ضغطة نظيفة أزيل ارتدادها.

if (stable == LOW && lastStable == HIGH)
  Serial.println("clean press");

التحديث للمرة التالية

في نهاية الحلقة، خزّن القراءات الحالية في متغيرات last لديك. فهذا يحافظ على حداثة المقارنة في كل دورة.

lastRaw = raw;
lastStable = stable;

ميزة عدم الحجب

لأن millis() لا توقف اللوحة أبدًا، تواصل مستشعراتك ومخرجاتك العمل. فأنت تزيل الارتداد بينما يبقى كل شيء آخر فعالًا. 🚀

تحقق سريع

لنتحقق من كيفية استخدام millis() لإزالة الارتداد وتحديد أن الضغطة حقيقية.

مراجعة: ضغطات نظيفة

استخدمت millis() لتجاهل الارتداد دون تجميد اللوحة، وقبلت الضغطة فقط بعد استقرارها. إدخال متين واحترافي! ✅

البدء مجانًا

تعلم C++ مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «إزالة ارتداد الإشارة باستخدام millis()» مجاني؟

نعم — نص درس «إزالة ارتداد الإشارة باستخدام millis()» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Arduino & IoT Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Arduino & IoT Academy 4 دروس في المجموع.

ماذا ستتعلم في «إزالة ارتداد الإشارة باستخدام millis()»؟

تجاهل التشويش عبر نافذة استقرار قصيرة. تتمرن على Arduino & IoT Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Arduino & IoT Academy؟

لا تُشترط خبرة سابقة. Arduino & IoT Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «إزالة ارتداد الإشارة باستخدام millis()»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Arduino & IoT Academy هذا؟

نعم. كل درس في Arduino & IoT Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا ترتد الأزرار
  2. إزالة ارتداد الإشارة باستخدام millis()
  3. تخزين قيمة في EEPROM
  4. تذكّر العداد بعد إعادة الضبط
← العودة إلى Arduino & IoT Academy