التعامل الصحيح مع Push-button اردينو بالفيديو


تطبيق على  bush-button اردينو بالفيديو

يعتبر ضاغط push-button في الحالة العادية اي عند عدم الضغط عليه ليس في الوضع 1 وليس في الوضع 0 وانما high impedance states  اي مقاومة عالية غير معرفة وليس لها قيمة معينة ولفهم ذلك سوف نقوم بالتطبيق التالي لكيفية استخدام  push-button في تطبيقات اردينو. سوف نستخدم في هذا التمرين pin رقم 8 كمدخل للمفتاح بحيث يعطي اشارة عند الضغط على الضاغط ويكتب الامر في برنامج اردينو كما يلي:
void setup() {
pinMode(8,INPUT);
 كما نستخدم pin رقم 13 كمخرج بحيث يتم توصيل فولطية 5v الى المصباح ويضيء حيث يكتب الامر في viod setup وتكتب كما يلي: (حيث تم تعريف 8 كمدخل و 13 كمخرج) 
void setup() {
pinMode(8,INPUT);
pinMode(13,OUTPUT);
}
وسوف يكتب في void loop العبارة التالية والتي تعني انه اذا كان المدخل 8 في وضع التوصيل (عند الضغط عليه) وكانت قيمته 1 واذا تحقق، كما في السطر التالي: 
 if (digitalRead(8) == 1){
 فاذا تحقبق الشرط فإن هذا يعني ذلك ان يكون المخرج 13 في وضع التشغيل ويضيء المصباح .
digitalWrite(13,1);
والبرنامج بشكل كامل يكتب بالشكل التالي: 
void setup() {
pinMode(8,INPUT);
pinMode(13,OUTPUT);
}
void loop() {
  if (digitalRead(8) == 1){
    digitalWrite(13,1);
  }
else{
  digitalWrite(13,0);
}
}
اما ان كان الوضع بخلاف ذلك اي ان يكون المفتاح في الوضع 0 فان المصباح سوف يكون في وضع الفصل. ويكتب الامر كما يلي: 
else{
  digitalWrite(13,0);
}
ولكن عند التطبيق العملي لهذا التوصيلة وعند الضغط على الضاغط سوف يكون الانارة عالية، اما في حالة عدم الضغط فسوف يكون حالة غير معرفة اي قيم فولطية غير معروفة كما في الفيديو التالي: 

 ولرؤية ذلك بشكل افضل نقوم بوضع تأخير زمني
   delay(50); 
بحيث يمكن مشاهدة وميض المصباح بشكل اوضح للدلالة على الاشارة الغير معروفة والمتغيرة والفيديو التالي يوضح ذلك:
ولعلاج هذه المشكلة يمكن اضافة مقاومة pull up Resistor وهي موجودة بداخل وحدة اردينو، ولتفعيل pul up Resistor نكتب الجملة التالية:

pinMode(8,INPUT_PULLUP);
بحيث يصبح البرنامج بالشكل التالي:
void setup() {
pinMode(8,INPUT_PULLUP);
pinMode(13,OUTPUT);
}

void loop() {
  delay(50);
  if (digitalRead(8) == 1){
    digitalWrite(13,1);
  }
else{
  digitalWrite(13,0);
}
}
والرسم التالي يوضح كيفية عمل pull up Resistor
حيث يتضح من الشكل السابق مفتاح push-button موصل معه طرف Gnd (أرضي) والطرف الاخر للضاغط يوصل مع مقاومة ومع مصدر 5v وهي المقاومة الداخلية التي تم تعريفها كما شرح اعلاه، بحيث وعند عدم الضغط على الضاغط فسوف يصل اشارة الى الـ pin 8 وبالتالي تكون الاشارة 1 وعند الضغط على الضاغط فسوف لن يصل 5v الى bin 8  وبالتالي فسوف تكون الاشارة 0 ، وهذه هي فكرة عمل pull up Resistor . 
وبناءا على ما سبق شرحة يجب عكس حالة القراءة لـ bin 8 بحيث تكون اذا كانت 0 يصبح المخرج في الحالة 1 واذا كان 1 يصبح المخرج في الحالة 0. والبرنامج التالي يوضح ذلك. 
void setup() {
pinMode(8,INPUT_PULLUP);
pinMode(13,OUTPUT);
}

void loop() {
  delay(50);
  if (digitalRead(8) == 0){
    digitalWrite(13,1);
  }
else{
  digitalWrite(13,0);
}
}
والفيديو التالي يوضح عمل الدارة: 
ويمكن توصيل مقاومة على المخرج في حالة اذا ما اردنا عدم تفعيل pull up Resistor واستخدام pull down Resistor والشكل التالي يوضح كيفية توصيل المقاومة الخارجية: 
ويمكن ان يتم تشغيل المصباح عند الضغط على push-button وان يتم اطفاء المصباح عند الضغط على push-button مرة اخرى ولتحقيق ذلك نكتب السطر التالي: 
void setup() {
pinMode(8,INPUT_PULLUP);
pinMode(13,OUTPUT);
}

void loop() {
delay(50);
if (digitalRead(8) == 0){
digitalWrite(13,!
digitalRead(13));
delay(500);
  }
}
وفي الكود السابق وعند استخدام الضغط في الكبسة الواحدة سوف يقرء اردينو الامر 2000 مرة ولذلك يجب كتابة تاخير زمني كما كتبنا سابقا. وهناك قاعدة في اردينو يجب استخدام قاعدة التحصين ضد الاغبياء بمعنى انه اذا تم الضغط بشكل دائم لا تتغير الحالات. 
حيث يتم كتابة الامر التالي والذي يعني انه اذا لم تتغير حالة الضغط تبقى القراءة في الحالة 0: 

While (digitalRead(8) == 0){
والفيديو التالي قبل استخدام while

اما بعد استخدام الامر while وعمل تاخير زمني ايضا يكتب البرنامج كما يلي:
void setup() {
pinMode(8,INPUT_PULLUP);
pinMode(13,OUTPUT);
}

void loop() {
delay(50);
if (digitalRead(8) == 0){
digitalWrite(13,!
digitalRead(13));
delay(50);
while (digitalRead(8) == 0){
delay(50);
  }
}
}
وقد تم عمل تاخير زمني لمدة 50 جزء من الثانية اثناء الضغط على الضاغط و50 جزء من الثانية بعد الضغط على الضاغط. والفيديو التالي يوضح ذلك: 


ملاحظة مهمة لتشغيل الفيديو يجب النقر عليه مرتين 


EmoticonEmoticon