التبديل عند كل ضغطة
جزء من قسم المدخلات في رحلة Arduino على Coddy. الدرس 4 من 22.
حتى الآن، كان مصباح LED يقلّد الزر: يضيء عند الضغط عليه، وينطفئ عند تركه. يعمل مفتاح المصباح بطريقة مختلفة: اضغط مرة لتشغيله، واضغط مرة أخرى لإطفائه. وهذا يُسمّى التبديل.
للتبديل، يجب أن تلاحظ الشيفرة اللحظة التي يُضغط فيها الزر: مضغوط الآن، لكنه لم يكن مضغوطًا في المرة السابقة التي نُفّذت فيها loop(). تُسمّى تلك اللحظة حافة. احتفظ بالقراءة السابقة في متغير أعلى setup()، مثل العداد:
int lastReading = HIGH;
void loop() {
int reading = digitalRead(2);
if (reading == LOW && lastReading == HIGH) {
// تم الضغط على الزر
}
lastReading = reading;
}عند الاستمرار في الضغط على الزر، تظل القراءة LOW، لذا تحدث الحافة مرة واحدة لكل ضغطة، مهما طالت مدة الضغط.
لقلب قيمة bool، استخدم !، التي تعني «ليس»: ledOn = !ledOn; تحوّل true إلى false والعكس.
التحدي
متوسطالزر موصول بالمنفذ 2 (INPUT_PULLUP) ومصباح LED بالمنفذ 13. اجعل كل ضغطة تبدّل حالة مصباح LED:
- عند ضغط الزر (
LOWالآن، وHIGHفي المرة السابقة)، بدّلledOn - احفظ القراءة في
lastReadingفي نهايةloop() - شغّل مصباح LED أو أطفئه ليتوافق مع
ledOn
اضغط على Run، واضغط على الزر بضع مرات، ثم اضغط على Check.
جرّب بنفسك
const int buttonPin = 2;
const int ledPin = 13;
bool ledOn = false;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
// اعكس قيمة ledOn عند الضغط على الزر
// احفظ هذه القراءة للمرة القادمة
// شغّل LED أو أطفئه ليتوافق مع ledOn
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المدخلات
تدرّب بنفسك: Playground لـ Arduino