جدول المحتويات:

لوحة مفاتيح مع شاشة LCD و Arduino Uno: 9 خطوات
لوحة مفاتيح مع شاشة LCD و Arduino Uno: 9 خطوات

فيديو: لوحة مفاتيح مع شاشة LCD و Arduino Uno: 9 خطوات

فيديو: لوحة مفاتيح مع شاشة LCD و Arduino Uno: 9 خطوات
فيديو: (Arduino - Keypad) أردوينو - لوحة المفاتيح 2024, شهر نوفمبر
Anonim
Image
Image
لوحة مفاتيح مع شاشة LCD و Arduino Uno
لوحة مفاتيح مع شاشة LCD و Arduino Uno
لوحة مفاتيح مع شاشة LCD و Arduino Uno
لوحة مفاتيح مع شاشة LCD و Arduino Uno

هذه لوحة مفاتيح مصفوفة تعمل جنبًا إلى جنب مع شاشة LCD و Arduino Uno ، وهي أبسط ما هو موجود اليوم. الغرض من هذا الإعداد هو إنشاء برنامج يتلقى كلمة مرور مكتوبة على لوحة مفاتيح المصفوفة ، ويقارنها بكلمة المرور الصحيحة ، ويعرض رسالة تأكيد على الشاشة.

من المهم أن تتذكر أن كلاً من لوحة مفاتيح المصفوفة وهذه الشاشة تعمل مع ESP8266 و ESP32.

كما ترى ، نقوم بتشغيل الدائرة باستخدام Arduino باستخدام USB ، نظرًا لأننا لا نستخدم مصدرًا خارجيًا. ثمانية أسلاك متصلة بطريقة بسيطة جدًا بمنافذ Arduino لتوصيل لوحة المفاتيح الخاصة بنا. لا تحتوي لوحة المفاتيح هذه على طاقة وهي سلبية ، مما يسهل الاتصالات بشكل كبير.

الشاشة متصلة بـ Arduino عبر UART ، المنفذ التسلسلي ، والذي يعمل أيضًا على تشغيل الجهاز.

في عرض توضيحي ، نعرض في الفيديو دارتنا تتحقق مما إذا كانت كلمة المرور المكتوبة على لوحة المفاتيح صحيحة أم لا.

في ملف PDF المستخدم في الفيديو والمتوفر هنا ، لدينا العدد الكامل للشريحة المستخدمة.

الخطوة 1: العرض التسلسلي

العرض التسلسلي
العرض التسلسلي
العرض التسلسلي
العرض التسلسلي

هذا هو العرض التسلسلي الذي يتصل بـ UART ، وهو RS مع TXRX. إنه موجود أيضًا في إصدارات I2C ، لكن النماذج الأخرى ستبقى للتجميع القادم. في هذه الحالة ، يعمل هذا العرض بواسطة UART بواسطة RS.

الخطوة 2: لوحة مفاتيح ماتريكس

لوحة مفاتيح ماتريكس
لوحة مفاتيح ماتريكس

مثال لوحة المفاتيح المصفوفة التي نستخدمها هو الصورة الموجودة على الجانب الأيمن. لدينا رسم تخطيطي يوضح كيف يعمل. في الواقع لديها خطوط 4 × 4 فقط. وبالتالي ، فإنه يستخدم الحد الأدنى من الأسلاك ؛ سلك واحد لكل صف وعمود ، بحيث يكون المجموع ثمانية أسلاك.

لا يحتاج إلى طاقة لأنه يعمل على النحو التالي: عند الضغط على الرقم 7 ، تلتقط لوحة المفاتيح الرقم 7 وتتصل بالخط والعمود ، مما يجعل التحديد ممكنًا عن طريق مسح الخوارزمية تلقائيًا.

من المهم أن تتذكر أن أي لوحة مفاتيح 4x4 عبارة عن مصفوفة نقطية ستعمل في هذا التجميع.

الخطوة 3: التجميع

المجسم
المجسم

في المخطط العام ، نقوم بتوصيل ثمانية أسلاك مباشرة بمنافذ Arduino ، لأن لوحة المفاتيح لا تحتوي على طاقة. في الشاشة ، لدينا إشارة RS 232 ، وقوة موجبة وسالبة. لا تزال الإضاءة الخلفية موجودة ، وهي متصلة بالفعل (تم تحديدها بواسطة BKL).

الخطوة 4: كود المصدر

في الكود المصدري لهذا المشروع ، يجب عليك تضمين المسلسل ولوحة المفاتيح. يحتوي على مجموعة RX_PIN و TX_PIN ، وهي ضرورية للبرنامج التسلسلي ، وكذلك INVERTED 1. تم وضع هذا في الأسفل لتضخيم الإشارة التي تستخدم المدخلات ذات المنطق المقلوب.

// biblioteca responsável pela comunicação com o display LCD # include // biblioteca responseável por capturar a tecla que foi pressionada no teclado #include // pino invalido apenas usado no contutor do SoftwareSerial #define RX_PIN 255 // pino TX nossa liga عرض شاشة LCD #define TX_PIN 3 // inverte a lógica dos pinos Rx e Tx ، tratando LOW como HIGH e ، العكس #define INVERTED 1

الخطوة 5: عرض الأوامر

أوامر العرض
أوامر العرض

هام: في هذه الشاشة ، لا يكفي مجرد وضع سلسلة عليها. تحتاج إلى إرسال أحرف التحكم. يحتوي ملف PDF على رابط الموقع الذي يوجد به دليل لهذا العرض. ولكن إذا كان لديك عرض تسلسلي لعلامة تجارية أخرى ، فمن الجيد إلقاء نظرة على رموز التحكم الخاصة بها المتعلقة بهذا الأمر. في هذا النموذج ، على سبيل المثال ، عندما نرسل عنصر تحكم معين (معلومات لهذا العرض ، على سبيل المثال) ، نحتاج إلى إرسال بادئة ، الرقم 254 ، لتمكين الاتصال.

لذلك قمنا بإعداد ARRAY لتسهيل الأمور ، وهي مجموعة من المتغيرات التي يتم الوصول إليها باستخدام فهرس رقمي. سيتم إرسال هذا إلى الشاشة كتكوين أولي.

// comando para limpar toda a tela do displayconst char limparTela = {254، 1}؛ // comandos de configuração inicial / * 254، 254 acende o backlight 254، 1 limpa a tela 254، 253، 1 configura o talke em nível alto 254، 13 liga o cursor paraficar piscando * / const char configInicial = {254، 254 ، 254 ، 1 ، 254 ، 253 ، 1 ، 254 ، 13} ؛

الخطوة 6: تشغيل لوحة المفاتيح

كيف تعمل لوحة المفاتيح؟ أولا ، يتصاعد مصفوفة. هذه المصفوفة من الشخصية التي سيتم عرضها بالفعل هناك. لذلك إذا وضعت علامة X ، فعند الضغط على الزر الأيسر الأول في الأعلى ، يتم عرضها. هذا هو محتوى لوحة المفاتيح ، وهو ما ستطلبه.

الأشياء الأخرى التي لدينا تعريف لها هي الصف رقم 4 والعمود رقم 4 ، في حالة صفيف لوحة المفاتيح هذه. لا يزال لدينا دبابيس للخطوط ، وهي دبابيس Arduino ودبابيس العمود. لا يزال لدينا مُنشئ لوحة مفاتيح مخصص مع معلمات الرمز والدبوس والصف والعمود.

const بايت LINHAS = 4 ؛ // número de linhas do tecladoconst byte COLUNAS = 4 ؛ // número de colunas do teclado // حدد uma matriz com os símbolos que deseja ser lido do teclado char SIMBOLOS [LINHAS] [COLUNAS] = {{'A'، '1'، '2'، '3'}، { 'B'، '4'، '5'، '6'}، {'C'، '7'، '8'، '9'}، {'D'، 'c'، '0'، 'e '}}؛ بايت PINOS_LINHA [LINHAS] = {8، 9، 10، 11} ؛ // pinos que indicam as linhas do teclado byte PINOS_COLUNA [COLUNAS] = {4، 5، 6، 7}؛ // pinos que indicam as colunas do teclado // instancia de Keypad، responsável por capturar a tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS)، PINOS_LINHA، PINOS_COLUNA، LINHAS، COLUNAS) ؛

الخطوة 7: إعداد كلمة المرور

في هذا الجزء ، نحدد كلمة المرور ، ثم نحتاج إلى إدخال كلمة مرور ، وهي سلسلة فارغة. أدناه ، نضع مثيل البرنامجسلسلة.

// varáveis resposnsáveis por armazenar as senhasconst String SENHA_ESPERADA = "1234ABCD"؛ سلسلة SENHA_DIGITADA = "" ؛ // instancia de SoftwareSerial para nos comunicar com o العرض عبر SoftwareSerial displaySerial = SoftwareSerial (RX_PIN، TX_PIN، INVERTED) ؛

الخطوة 8: الإعداد

أما بالنسبة للإعداد ، فإليك عرض displaySerial.begin (2 ، 400) ، والذي يتعلق بالسرعة. في حالتنا ، هذا يكفي لإرسال بايت. بعد ذلك ، هناك انتظار 700 مللي ثانية. نقوم بتضمين displaySerial.print (initialConfig) من التكوين الأولي مع تأخير جديد قدره 10 مللي ثانية ، وننتقل إلى وظيفة البدء. في وظيفة البدء ، نضع displaySerial.print ("كلمة المرور:").

إعداد باطل () {Serial.begin (2400) ؛ // inicializando a serial de comunicação com o display // importante o baud rate ser de 2400 displaySerial.begin (2400)؛ // tempo de espera pela inicialização عرض تأخير (700) ؛ // seta a configuração inicial do displaySerial.print (configInicial) ؛ تأخير (10) ؛ inicio () ؛ } // função responseável por Imprimir na tela a mensagem para digitar a senha // é chamada toda vez q a senha foi digitada e Comparada، também quando // a tecla limpar display foi pressionada. void inicio () {displaySerial.print ("Senha:")؛ }

الخطوة 9: التكرار

في الحلقة ، نقوم بإنشاء customKey = customKeypad.getKey () ، وفي التسلسل ، نقوم بإدخال أمر Switch.

// captura a tecla pressionada do teclado char customKey = customKeypad.getKey () ؛ // caso alguma tecla foi pressionada if (customKey) {Serial.println (customKey) ؛ مفتاح التحويل (مفتاح مخصص) {/… /}}

حلقة التبديل الجزء 1

داخل أمر التبديل: يعرض قائمة إمكانيات المفاتيح القابلة للطباعة ، إذا تم الضغط عليه ، ويزيد كلمة المرور: يأخذ المفتاح المخصص ويجمع كلمة المرور التي تم إدخالها. بعد ذلك ، يعرض displaySerial.print (مفتاح مخصص) محتويات المفتاح.

switch (customKey) {// caso alguma das teclas Imprimíveis foi pressionada case 'A': case 'B': case 'C': case 'D': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': // concatena o novo símbolo a senha que estamos digitando SENHA_DIGITADA + = customKey؛ Serial.println (SENHA_DIGITADA) ، // imrpime na tela o símbolo pressionado displaySerial.print (customKey) ؛ استراحة؛

حلقة التبديل الجزء 2

في هذا الكود ، نعرض سيناريو إذا تم الضغط على مفتاح CLEAR. إذا قمت بكتابة الحرف C ومسح المتغير الذي يحمل كلمة المرور التي تكتبها ، فإنه يستدعي الأمر لمسح الشاشة وإعادة التشغيل.

// caso a tecla CLEAR tenha sido pressionada case 'c': // limpa a variável que guarda a senha que está sendo digitada SENHA_DIGITADA = ""؛ // chama o comando para limpar a tela displaySerial.print (limparTela) ؛ // configura a mensagem para digitar a senha inicio () ؛ استراحة؛

حلقة التبديل الجزء 3

الاحتمال الآخر هو إذا قمت بكتابة الحرف E. في هذه الحالة ، سيتم تنظيف الشاشة وتحليلها إذا كانت كلمة المرور التي تم إدخالها صحيحة أو غير صحيحة. بعد ذلك ، سنعطي تأخيرًا جديدًا لمدة ثانيتين ، ونمسح الشاشة ، ونعيد تعيين متغير كلمة المرور ، ونعود إلى البداية.

// caso a tecla ENTER seja pressionada، devemos Comparar as senhas case 'e': // limpa a tela displaySerial.print (limparTela) ؛ // se a senha digitada foi igual a ESPERADA if (SENHA_ESPERADA == SENHA_DIGITADA) {Serial.println ("Senha Correta!") ؛ // Imprime mensagem de senha correta displaySerial.print ("Senha Correta !!!") ؛ } // caso senha esteja errada else {Serial.println ("Senha Incorreta!")؛ // Imprime mensagem de senha insertreta displaySerial.print ("Senha Incorreta!") ؛ } // aguarda 2 segundos para limpar a tela novamente e esperar uma nova senha ser digitada delay (2000) ؛ displaySerial.print (limparTela) ؛

موصى به: