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.

../_images/list_2.1.5_keypad.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ARTÍCULOS EN ESTE KIT

ENLACE

Raphael Kit

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

Teclado

-

Diagrama Esquemático

../_images/image315.png ../_images/image316.png

Procedimientos Experimentales

Paso 1: Construir el circuito.

../_images/image186.png

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”:

../_images/image187.png

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

../_images/image188.jpeg