قد نحتاج في أحد مشاريعنا إلى فتح الباب أو تشغيل جهاز عن طريق رقم سريّ يكتب عن طريق لوحة مفاتيح رقميّة Pavé numérique
في هذا الدرس سنتعرّف على
كيفية تركيب لوحة مفاتيح رقميّة و طريقة برمجتها
مكوّنات لوحة مفاتيح رقميّة
تتكوّن لوحة مفاتيح رقميّة 4*4 على 16 زر مصفوفة على 4 صفوف و بـ 4 أعمدة عما هو مبيّن في الرسمة التالية

و تحتوي على 8 أقطاب

4 أسطر (4 Lignes
)مرقّمة L1 L2 L3 L4
و 4 أعمدة (ِ4 Colonnes
) مرقّمة C1 C2 C3 C4
عند الضغط على الزر 1 يعني L1 وC1 مترابطتين
عند الضغط على الزر 2 يعني L1 وC2 مترابطتين
عند الضغط على الزر3 يعني L1 وC3 مترابطتين
عند الضغط على الزر A يعني L1 وC4 مترابطتين
عند الضغط على الزر 4 يعني L2 وC1 مترابطتين
عند الضغط على الزر 5 يعني L2 وC2 مترابطتين
عند الضغط على الزر 6 يعني L2 وC3 مترابطتين
عند الضغط على الزر B يعني L2 وC4 مترابطتين
عند الضغط على الزر 7 يعني L3 وC1 مترابطتين
عند الضغط على الزر 8 يعني L3 وC2 مترابطتين
عند الضغط على الزر 9 يعني L3 وC3 مترابطتين
عند الضغط على الزر C يعني L3 وC4 مترابطتين
عند الضغط على الزر * يعني L4 وC1 مترابطتين
عند الضغط على الزر 0 يعني L4 وC2 مترابطتين
عند الضغط على الزر # يعني L4 وC3 مترابطتين
عند الضغط على الزرD يعني L4 وC4 مترابطتين
لا تحتوي هذه اللوحة المفاتيح على سلك مشترك لمعرفة الزر المضغوط عليه
بالتالي فإنّ طريقة معرفه تقوم على البرمجة بأن يرسل تيار كهربائي(حالة مرتفع) و البحث عنه في بقيّة الأسلاك ثم ينتقل إلى السلك الموالي و هكذا لمعرفة الزر المضغوط
مكتبة لوحة المفاتبح
لن نقوم ببرمجة للبحث عن الزر المضغوط فقد قاموا ببرمجتها بطرق محترفة .
في البحث في الأنترنات عن كلمة Keypad و خاصة من الموقع الرسمي نجد هذا اارابط
بعد التحميل و الفك نجد ملف يسمّ Keypad
نقوم بوضع في برنامج الأردوينو في مسارC:\Program Files\Arduino\libraries
ثمّ نقوم بفتح البرنامج تمّ إضافة Keypad في
Fichier -> Exemples ->Keypad
نختار ملف CustomKeypad

نتحصّل على برمجة للوحة المفاتيح الرقميّة

سنغيّر ما هو في إطار الأحمر حتّى تتطابق مع دارتنا الكهربائية و حسب أزرار
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
و في إطار الثاني يتمّ تغيير أرقام المنافذ للوحة الأردوينو
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
شاهد هذا كيفية تحميل و إستعمال مكتبة لوحة المفاتيح
مشاهدة التمرين على موقع TinCarKed
كود البرنامج
من الأفضل إستعمال الطّريقة السابقة لإنجاز برمجة أردوينو حتّى تتمكّن من إستعمال مكتبات لتمارين أخرى و كما يمكنك نسخ الكود التالي و إستعماله على الموقع Tincercad
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
تمرين
نضيف إلى الدارة سابقة 2 صمام مشع (أحمر و أخضر)
و الهدف من التمرين إضاءة صمام مشع عند وضع كلمة السر “1977”

لمستعمل يكتب كلمة السر مثال “1977” يضيئ صمام مشع الأخضر لمدّة 5 ثواني ثمّ ينطفئ
عند كل ضغطة على أي زر يضيء الصمام المشع لمدّة نصف ثانية ثم ينطفئ (دليل على الضغط)
عند الضغط على حرف A يتمّ مسح كلمة السر و يكتب على شاشة الحاسوب (Code effacer)
عند الضغط على حرف B يتمّ حذف آخر حرف لإصلاح كلمة السر و يكتب على شاشة الحاسوب (Dernier lettre effacer )
عند الضغط على حرف C يتمّ إظهارالكود الذي كتبتة على شاشة الحاسوب بهذا الشكل (Code Taper est:)
عند الضغط على حرف ]D و إذا كان رقم السرّي صحيح و يكتب على شاشة الحاسوب (Executer) ثمّ ينفّذ الأوامر المطلوبة (يضيء صمام المشع الأخضر لمدّة 5 ثواني ثمّ ينطفئ أما إذا كان الكود غير صحيح يكتب (Code fausse)
ملاحظة: الكلمات التي تظهر على على شاشة الحاسوب تكتب بحروف إنقليزيّة لكي تظهر بشكل صحيح
شاهد هذا الفيديو لمعرفة كيفية إضاءة صمام مشع بإستعمال رقم سرّي
شاهد هذا التمرين عبر موقع TinKerCad
كود لهذا التمرين
#include <Keypad.h>
String code="";
String motDePasse="1977";
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
//-----------------------------
if(customKey=='A'){
code="";
Serial.println("Code effacer");
}
else if(customKey=='B'){
code=code.substring(0,code.length()-1);
Serial.println("Dernier lettre effacer");
}
else if(customKey=='C'){
Serial.print("Code Tapper est:");
Serial.println(code); ;
}
else if (customKey=='D'){
Serial.print("Executer");
if (code == motDePasse){
Serial.println(":Vrai");
digitalWrite(12,HIGH);
digitalWrite(13,LOW);
delay(5000);
digitalWrite(12,LOW);
}else{
Serial.println(":Faux");
digitalWrite(13,HIGH);
}
code="";}
else{
code=code+customKey;
}
//--------------------------------
}
}
شرح كود البرمجة
#include <Keypad.h>
إضافة مكتبة خاصة بلوحة رقمية
String code="";
تعيين متغير code من نوع مجموعة حروف فارغة
String motDePasse="1977";
إنشاء متغير motDePasse كمجموعة حروف تحتوي على كلمة السر
const byte ROWS = 4;
إنشاء متغير ثابت ROWS يحتوي على عدد الأسطر للوحة المفاتيخ
const byte COLS = 4;
إنشاء متغير ثابت COLS يحتوي على عدد الأعمدة
char hexaKeys[ROWS][COLS] = {
إنشاء متغير من نوع جدول ثنائي متكوّن من عدد الأسطر و عدد الأعمدة
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
وضع محتوى الأزرار لوحة المفاتيح
};
نهاية الجدول
byte rowPins[ROWS] = {9, 8, 7, 6};
إنشاء متغيّر وضع فيه أرقام منافذ لوحة الأردوينو المرتبطة بأقطاب الخاصة بالأسطر
byte colPins[COLS] = {5, 4, 3, 2};
إنشاء متغيّر وضع فيه أرقام منافذ لوحة الأردوينو المرتبطة بأقطاب الخاصة بالأسطر
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
إدخال إعدادات (أسطر و أعمدة ) لوحة المفاتيح
إعدادات البرنامج
void setup(){
إعدادات البرنامج
pinMode(12, OUTPUT);
تهيّة منفذ 12 من لوحة المفاتيح كمخرج للتيذّر الكهربائي
pinMode(13, OUTPUT);
تهيّة منفذ 13 من لوحة المفاتيح كمخرج للتيذّر الكهربائي
Serial.begin(9600);
تهيئة لوح المفاتيح بالتراسل التسلسلي بين الحاسوب و أردوينو
}
نهاية الإعدادات
بداية البرمجة الرئيسيّة
void loop(){
بداية البرمجة الرئيسيّة
char customKey = customKeypad.getKey();
التعرّف على الزر المضغوط
if (customKey){
إذا تمّ الضغط على أحد الأزرار
//-----------------------------
هذا تعليق فقط لا يقرأ من طرف لوحة أردوينو تكتب خاصّة للمستعمل لتنظيم البرنامج و للتذكير و لوضع الإعدادات من طرف المستعملين عموماو لكتابة بعض المعلومات عن منجز للبرنامج كالإسم و طريقة التّواصل ….
if(customKey=='A'){
إذا كان الزر المضغوط A
code="";
قيمة الكود تصبح فارغة
Serial.println("Code effacer");
كتابو كلمة Code effacer على شاشة الحاسوب
}
نهاية الشرط الأوّل
else if(customKey=='B'){
إذا كان الزر المضغوط حرف B
code=code.substring(0,code.length()-1);
حذف آخر كرف من الحروف المضغوطة
Serial.println("Dernier lettre effacer");
كتابة على شاشة الحاسوب Dernier lettre effacer
}
نهاية الشرط
else if(customKey=='C'){
إذا كان الزر المضغوط حرف C
Serial.print("Code Tapper est:");
كتابة على شاشة الحاسوب Code Tapper est و بدون الرجوع إلى السطر
Serial.println(code);
كتابة الأرقامة المضغوطة و العودة إلى السطر
}
نهاية الشرط
else if (customKey=='D'){
إذا كان الزر المضغوط حرف D
Serial.print("Executer");
كتب على شاشة الحاسوب كلمة Executer
if (code == motDePasse){
شرط ثاني داخل الشرط السابق
Serial.println(":Vrai");
كتابة على شاشة الحاسوب كلمة Vrai
digitalWrite(12,HIGH);
المنفذ رقم 12 مرتفع (صمام المشع الأخضر يضيء)
digitalWrite(13,LOW);
المنفذ رقم 13 منخفذ(صمام المشع الأحمر منطفئ )
delay(5000);
إنتظار 5 ثواني
digitalWrite(12,LOW);
المنفذ 12 في حالة منخفذ (الصمام الأخضر ينطفئ بعدما أضاء 5 ثواني
}else{
إذا لم تتوفّر الشروط السابقة
Serial.println(":Faux");
تكتب على شاشة الحاسوب كلمة Faux و العودة إلى السطر
digitalWrite(13,HIGH);
المنفذ 13 يكون مرتفع إلى أن يكتب المستعمل كلمة السر صحيحة
}
نهاية الشرط
code="";}
حذف كلمة المرور
else{
إذا الشروط الرئيسية غير متوفّرة
code=code+customKey;
إضافة حرف المضغوط الحاليّة إلى أحرف المضغوطة السّابقة
}
نهاية الشرط
//--------------------------------
هذا تعليق فقط
}
نهاية الشرط الأوّل إذا الزر المضغوط
}
نهاية البرمجة
تمرين خاص
تعديل على التمرين السابق بإضافة
1- جرس منبه يرن عند وضع كلمة السر خاطئة 3 مرّات و لا يكف عن الرن إلا إذا وضعت كلمة السر صحيحة
2-يمكن للمستعمل تغيير كلمة السر بالضغط عل*122*ancien mot de passe*nouveau mot de passe#
مثال لتغير رقم السري من 1977 إلى 2200 نضغط على
*122*1977*2200#
أول من ينجز تمرين صحيح سينشر تمرينه هنا مع ذكرإسمه و الإجابة تكون تحت هذا الرابط على صفحتنا على الفيسبوك و كذلك آي تعليق أو إستفسار أيضا على نفس الرابط إضغط هنا