Menu
CoddyTech
flag Ar iconالعربيةdown icon

العدّ التنازلي حتى الصفر

جزء من قسم الشاشات والمستشعرات في رحلة Arduino على Coddy. الدرس 4 من 24.

كما في حركة مسح محرك السيرفو، يمكن لحلقة for أن تعدّ تنازليًا: ابدأ من عدد كبير، واستمر ما دام العدد 0 أو أكثر، وأنقصه بمقدار واحد في كل مرة باستخدام n--:

for (int n = 5; n >= 0; n--) {
  showDigit(n);
  delay(1000);
}

يعرض هذا الأعداد 5 و4 و3 و2 و1 و0. باستخدام n > 0 سيتوقف عند 1 ولن يعرض 0 أبدًا.

ينبغي أن يحدث العدّ التنازلي مرة واحدة، لا مرارًا وتكرارًا. يُنفَّذ الكود في setup() مرة واحدة، لذا ضع العدّ التنازلي هناك، وما يحدث عند الوصول إلى 0 بعده. يمكن أن تبقى loop() فارغة، وسيظل العدد 0 ظاهرًا على الشاشة.

challenge icon

التحدي

سهل

الجرس متصل بالمنفذ 9. أنشئ عدًّا تنازليًا للإطلاق:

  • في setup()، عُدّ تنازليًا من 5 إلى 0، رقمًا واحدًا كل ثانية
  • عند 0، شغّل الجرس باستخدام tone(buzzerPin, 880, 1000)
  • اترك الرقم 0 ظاهرًا على الشاشة

اضغط على Run، ثم Check.

جرّب بنفسك

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// نمط واحد لكل رقم، يُقرأ من اليمين: البت الأخير هو المقطع a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b1100110,  // 4
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000111,  // 7
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  for (int i = 0; i < 7; i++) {
    if (bitRead(digits[n], i) == 1) {
      digitalWrite(segmentPins[i], LOW);   // مضاء
    } else {
      digitalWrite(segmentPins[i], HIGH);  // مطفأ
    }
  }
}

const int buzzerPin = 9;

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }

  // عُدّ تنازليًا من 5 إلى 0 هنا، ثم شغّل الجرس
}

void loop() {
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الشاشات والمستشعرات

تدرّب بنفسك: Playground لـ Arduino