Nota
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirse?
Soporte experto: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Vistas previas exclusivas: Obtén acceso anticipado a anuncios de nuevos productos y adelantos exclusivos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
Promociones y sorteos festivos: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy.
2.1.8 Teclado
Introducción
Un teclado es una matriz rectangular de botones. En este proyecto, lo utilizaremos para ingresar caracteres.
Componentes necesarios
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Raphael Kit |
337 |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
- |
Diagrama Esquemático
Procedimientos Experimentales
Paso 1: Construir el circuito.
Paso 2: Abre el archivo de código.
cd ~/raphael-kit/python/
Paso 3: Ejecuta.
sudo python3 2.1.8_Keypad.py
Después de ejecutar el código, los valores de los botones presionados en el teclado (Valor del botón) se imprimirán en la pantalla.
Código
Nota
Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como raphael-kit/python. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
import RPi.GPIO as GPIO
import time
class Keypad():
def __init__(self, rowsPins, colsPins, keys):
self.rowsPins = rowsPins
self.colsPins = colsPins
self.keys = keys
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.rowsPins, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(self.colsPins, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def read(self):
pressed_keys = []
for i, row in enumerate(self.rowsPins):
GPIO.output(row, GPIO.HIGH)
for j, col in enumerate(self.colsPins):
index = i * len(self.colsPins) + j
if (GPIO.input(col) == 1):
pressed_keys.append(self.keys[index])
GPIO.output(row, GPIO.LOW)
return pressed_keys
def setup():
global keypad, last_key_pressed
rowsPins = [18,23,24,25]
colsPins = [10,22,27,17]
keys = ["1","2","3","A",
"4","5","6","B",
"7","8","9","C",
"*","0","#","D"]
keypad = Keypad(rowsPins, colsPins, keys)
last_key_pressed = []
def loop():
global keypad, last_key_pressed
pressed_keys = keypad.read()
if len(pressed_keys) != 0 and last_key_pressed != pressed_keys:
print(pressed_keys)
last_key_pressed = pressed_keys
time.sleep(0.1)
# Define a destroy function for clean up everything after the script finished
def destroy():
# Release resource
GPIO.cleanup()
if __name__ == '__main__': # Program start from here
try:
setup()
while True:
loop()
except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the program destroy() will be executed.
destroy()
Explicación del Código
def setup():
global keypad, last_key_pressed
rowsPins = [18,23,24,25]
colsPins = [10,22,27,17]
keys = ["1","2","3","A",
"4","5","6","B",
"7","8","9","C",
"*","0","#","D"]
keypad = Keypad(rowsPins, colsPins, keys)
last_key_pressed = []
Declara cada tecla del teclado matricial en el array keys[] y define los pines en cada fila y columna.
def loop():
global keypad, last_key_pressed
pressed_keys = keypad.read()
if len(pressed_keys) != 0 and last_key_pressed != pressed_keys:
print(pressed_keys)
last_key_pressed = pressed_keys
time.sleep(0.1)
Esta es la parte de la función principal que lee e imprime el valor del botón.
La función keyRead() leerá el estado de cada botón.
La declaración if len(pressed_keys) != 0 y last_key_pressed != pressed_keys se utiliza para juzgar
si un botón está presionado y el estado del botón presionado. (Si presionas '3' cuando presionas '1', el juicio es válido).
Imprime el valor de la tecla presionada actualmente cuando la condición es válida.
La declaración last_key_pressed = pressed_keys asigna el estado de cada
juicio a un array last_key_pressed para facilitar la siguiente ronda de
juicio condicional.
def read(self):
pressed_keys = []
for i, row in enumerate(self.rowsPins):
GPIO.output(row, GPIO.HIGH)
for j, col in enumerate(self.colsPins):
index = i * len(self.colsPins) + j
if (GPIO.input(col) == 1):
pressed_keys.append(self.keys[index])
GPIO.output(row, GPIO.LOW)
return pressed_keys
Esta función asigna un nivel alto a cada fila por turno, y cuando se presiona
el botón en la columna, la columna en la que se encuentra la tecla obtiene un
nivel alto. Después de que el bucle de dos capas se juzga, el valor del botón
cuyo estado es 1 se almacena en el array pressed_keys.
Si presionas la tecla “3”:
rowPins[0] se escribe en nivel alto, y colPins[2] obtiene nivel alto.
colPins[0], colPins[1], colPins[3] obtienen nivel bajo.
Hay cuatro estados: 0, 0, 1, 0; y escribimos '3' en pressed_keys.
Cuando rowPins[1], rowPins[2], rowPins[3] se escriben en nivel alto, colPins[0] ~ colPins[4] obtienen nivel bajo.
El bucle se detuvo, se devuelve pressed_keys = '3'.
Si presionas las teclas “1” y “3”, se devolverá pressed_keys = [‘1’,’3’].
Foto del Fenómeno