Tabla de contenido:

Teclado de un pin 4 × 4: 10 pasos
Teclado de un pin 4 × 4: 10 pasos

Video: Teclado de un pin 4 × 4: 10 pasos

Video: Teclado de un pin 4 × 4: 10 pasos
Video: Error PIN Teclado Bluetooth Windows 10 (Solucion 🛠✅ ) 2024, Mes de julio
Anonim
Teclado de un pin 4 × 4
Teclado de un pin 4 × 4

Cada vez que veo un teclado, viene con muchos pines, es un gran desperdicio de los pines de Arduino, así que ¿podemos ejecutar un teclado con un solo pin?. La respuesta está aquí.

Paso 1: Lista de materiales

Lista de materiales
Lista de materiales

Hardware:

01 Arduino UNO

02 tablas de pruebas

01 LCD con I2C

16 pulsadores

04 resistencias 1,5 kΩ

04 resistencias 620 Ω

04 resistencias 220 Ω

08 resistencias 100 Ω

01 resistencia 1 kΩ

07 Cables de puente

Software:

Arduino IDE instalado en su PC

Paso 2: Esquema y Cicruit

Esquemático y Cicruit
Esquemático y Cicruit
Esquemático y Cicruit
Esquemático y Cicruit

La idea es que tenemos una matriz de 4 * 4 botones conectados verticalmente a tierra por el cable derecho y horizontalmente por el otro cable (el cable del botón) y resistencias de 1.5 kΩ, 620Ω, 220Ω y 100Ω, los extremos de las 4 filas están conectadas por cuatro resistencias de 100 Ω como se muestra en el esquema.

Cada vez que presiona un botón, cierra el circuito y la corriente pasa por una ruta diferente y una cadena de resistencias diferente, por eso el pin A0 recibe una lectura analógica diferente para cada botón. Todo lo que necesitas ahora es codificar.

Paso 3: el código

#incluir

#incluir

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Botón = A0;

int readvalue;

configuración vacía ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Botón, ENTRADA);

LCD luz de fondo();

lcd.print ("Hola mundo");

retraso (2000);

lcd.clear ();

lcd.print ("Teclado de un pin 4 * 4");

retraso (2000); }

bucle vacío ()

{

readvalue = analogRead (Botón);

Serial.println (valor de lectura);

if (valor de lectura == 852) {lcd.clear (); lcd.print ("A");}

else {if (valor de lectura == 763) {lcd.clear (); lcd.print ("B");}

else {if (valor de lectura == 685) {lcd.clear (); lcd.print ("C");}

else {if (valor de lectura == 965) {lcd.clear (); lcd.print ("D");}

else {if (valor de lectura == 565) {lcd.clear (); lcd.print ("9");}

else {if (valor de lectura == 614) {lcd.clear (); lcd.print ("6");}

else {if (valor de lectura == 360) {lcd.clear (); lcd.print ("3");}

else {if (valor de lectura == 335) {lcd.clear (); lcd.print ("#");}

else {if (valor de lectura == 396) {lcd.clear (); lcd.print ("8");}

else {if (valor de lectura == 349) {lcd.clear (); lcd.print ("5");}

else {if (valor de lectura == 235) {lcd.clear (); lcd.print ("2");}

else {if (valor de lectura == 279) {lcd.clear (); lcd.print ("0");}

else {if (valor de lectura == 452) {lcd.clear (); lcd.print ("7");}

else {if (valor de lectura == 271) {lcd.clear (); lcd.print ("4");}

else {if (valor de lectura == 170) {lcd.clear (); lcd.print ("1");}

else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}

Paso 4: corrección de valores

Corrección de valores
Corrección de valores

Cuando abres el monitor serial te mostrará un valor de 1023, si presionas un botón te dará otra lectura tienes que tomar esos valores y hacer algunos cambios en el código

Paso 5: Proyecto después de la crítica y revisión

Proyecto después de la crítica y revisión
Proyecto después de la crítica y revisión

No cabe duda que todos estamos aquí para aprender y compartir nuestros conocimientos, gracias a algunos comentarios que dejaron algunas personas de la comunidad que fueron de mucha ayuda, decidí hacer algunos ajustes y mejoras a mi proyecto:

El hardware:

Decidí soldar todos los componentes en una PCB para evitar el problema de la mala conexión en las placas de prueba.

El código:

Un amigo me recomendó que usara un software antirrebote y es solo un bucle (bucle "for", por ejemplo) para que el programa se tome un tiempo para elegir una lectura, significa que hace muchas lecturas (500 en mi ejemplo) pero toma solo el ultimo.

for (i = 1; i <= 500; i ++) {// tomar solo el 500th analogread

value = analogRead (Button);} // eso ayuda a tomarse un tiempo y evitar malas lecturas

Otro amigo gracias a él me recomendó comparar "readvalue" con un rango de valores, no uno porque "readvalue" toma muchos valores para el mismo pulsador. La "A", por ejemplo, da una lectura de: 849, 850, 851 852, 853, 854, 855 por lo que es un rango de 7 valores: un umbral (852) y 3 valores a la izquierda y a la derecha. lo que tenemos que hacer aquí es comparar el valor absoluto de la diferencia entre "readvalue" y "852" con "3".

if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}

Paso 6: Después de un poco de trabajo vendido

Después de un trabajo de Soldring
Después de un trabajo de Soldring
Después de un trabajo de Soldring
Después de un trabajo de Soldring
Después de un trabajo de Soldring
Después de un trabajo de Soldring

Paso 7: El momento de la verdad

Como puede ver, el programa a veces confunde los botones pero aún funciona, en teoría no hay nada malo en el circuito, pero el código necesita más calibración.

Paso 8: el final

Espero que te guste este proyecto y trates de hacerlo, quizás te vaya mejor que a mí.

Pregúntame si tienes dudas, deja comentarios y no olvides votar por mí si te gusta.

Recomendado: