الدرس 6 - تشغيل LED عند الضغط على زر موصل مع Pull Up Res

محمد صلاح الدينمنذ 4 سنوات

في التجربة السابقة قمنا بتصميم دائرة أردوينو تعمل على اضاءة LED عند الضغط على زر push button. هذا الزر كان موصلاً مع مقاومة pull down resistor. سنقوم في هذه التجربة بتصميم نفس الدائرة ولكن عن طريق توصيل الزر مع مقاومة pull up resistor. كذلك سنتعلم كيف يمكن الاستغناء عن مقاومة pull up وتوصيل الزر مباشرة دون استخدام أي مقاومات.

 

تصميم الدائرة على بروتيوس

افتح برنامج بروتيوس وقم بتصميم الدائرة كما هو موضح بالشكل التالي (يمكنك الرجوع للدرس الرابع لمعرفة الخطوات)

 

شرح الدائرة

هذه الدائرة لاتختلف كثيرا عن الدائرة الموجودة بالدرس الخامس ، فقط قمنا بإستبدال مقاومة pull down بمقاومة pull up. والفرق بينهما واضح فالمقاومة هنا موصلة بين مصدر الجهد 5v و الزر بينما في حالة pull down المقاومة يتم توصيلها بين الأرضي والزر كما تعلمنا في الدرس السابق. حسنا ً ماذا سيحدث عندما لايتم الضغط على الزر؟ سيعتبر جزء الزر غير موجود باعتبار أن الدائرة مفتوحة وسيقوم البورت رقم 2 بالأردوينو بقراءة الفولتية الموجودة على النقطة التي يتصل بها وبالتأكيد ستكون قيمة الفولتية في هذه النقطة تساوي 5v. إذاً لابد من مراعاة هذه النقطة جيداً في الكود لأن المنطق سيكون معكوسا ً فعند قراءة قيمة 5v عبر البورت رقم 2 فاننا لن نضيء الـ LED. بالمقابل عن الضغط على الزر ستكون القراءة عبر المنفذ رقم 2 هي 0v (تذكر أن الفولتية تُقرأ بين النقطة التي تحددها أنت والـ GND) ، الآن لدينا 0v في المنفذ رقم 2 وهو يعني المنطق LOW وفي نفس الوقت نريد أن نضيء الـ LED وهذا مايجب أن يتم تنفيذه عبر الكود.

 

كتابة وشرح الكود على برنامج الأردوينو

قم بكتابة الكود التالي على برنامج الأردوينو ثم استخرج ملف Hex كما هو موضح بالدرس الرابع

const int ledPin = 10;
const int buttonPin = 2;

int buttonState = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  buttonState = digitalRead(buttonPin);
  if (buttonState == LOW)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}

 

لن نحتاج الى توضيح الكثير بخصوص الكود حيث لايوجد فرق بينه وبين الكود الموجود بالدرس الخامس الا في جزئية الشرط فهنا الشرط معكوس عن ذلك الموجود بالدرس الخامس ففي هذه الحالة عندما يكون المتغير buttonState == LOW سيتم ارسال الأمر HIGH  الى البورت المتصل مع الـ LED. كذلك عندما يكون buttonState في حالة High وهو المتمثل بالأمر else عندها سيتم ارسال الأمر LOW إلى البورت المتصل مع الـ LED.

 

كيف يمكن الاستغناء عن مقاومة pull up؟

يمكننا توصيل الزر مباشرة دون استخدام مقاومة وذلك لأن المنافذ على المايكروكونترولر تحتوي تلقائياً على مقاومة داخلية يمكن استخدامها كمقاومة pull up. ولتفعيل ذلك كل ماعلينا فعله هو إضافة الكود (digitalWrite(buttonPin, HIGH التالي الى الـ setup. وستصبح الدائرة كما بالشكل التالي.

void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  digitalWrite(buttonPin, HIGH);
}

 

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !