Nota
Ciao e benvenuto nella Community di Appassionati di SunFounder per Raspberry Pi, Arduino ed ESP32 su Facebook! Esplora a fondo il mondo di Raspberry Pi, Arduino ed ESP32 insieme a tanti altri appassionati.
Perché Unirsi?
Supporto da Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato agli annunci dei nuovi prodotti e a contenuti inediti.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
2.1.5 Tastierino
Introduzione
Un tastierino è una matrice rettangolare di pulsanti. In questo progetto, lo utilizzeremo per inserire caratteri.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
Schema Elettrico
Procedure Sperimentali
Passo 1: Costruisci il circuito.
Passo 2: Apri il file del codice.
cd ~/davinci-kit-for-raspberry-pi/python-pi5
Passo 3: Esegui.
sudo python3 2.1.5_Keypad.py
Dopo l’esecuzione del codice, i valori dei pulsanti premuti sul tastierino (button Value) verranno stampati sullo schermo.
Avvertimento
Se compare l’errore RuntimeError: Cannot determine SOC peripheral base address, consulta Se gpiozero non funziona.
Codice
Nota
Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto. Prima di farlo, però, vai al percorso del codice sorgente, come davinci-kit-for-raspberry-pi/python-pi5. Dopo aver modificato il codice, potrai eseguirlo direttamente per vedere il risultato.
#!/usr/bin/env python3
from gpiozero import DigitalOutputDevice, Button
from time import sleep
class Keypad:
def __init__(self, rows_pins, cols_pins, keys):
"""
Initialize the Keypad with specified row and column pins and keypad layout.
:param rows_pins: List of GPIO pins for the rows.
:param cols_pins: List of GPIO pins for the columns.
:param keys: List of keys in the keypad layout.
"""
# Inizializza i pin delle righe come DigitalOutputDevice
self.rows = [DigitalOutputDevice(pin) for pin in rows_pins]
# Inizializza i pin delle colonne come pulsanti
self.cols = [Button(pin, pull_up=False) for pin in cols_pins]
self.keys = keys # Imposta il layout del tastierino
def read(self):
"""
Read the currently pressed keys on the keypad.
:return: A list of pressed keys.
"""
pressed_keys = []
# Scansiona ogni riga e colonna per identificare i tasti premuti
for i, row in enumerate(self.rows):
row.on() # Attiva la riga corrente
for j, col in enumerate(self.cols):
if col.is_pressed: # Controlla se il pulsante della colonna è premuto
# Calcola l'indice del tasto in base alla riga e colonna
index = i * len(self.cols) + j
pressed_keys.append(self.keys[index])
row.off() # Disattiva la riga corrente
return pressed_keys
try:
# Configura le righe, le colonne e il layout del tastierino
rows_pins = [18, 23, 24, 25]
cols_pins = [10, 22, 27, 17]
keys = ["1", "2", "3", "A",
"4", "5", "6", "B",
"7", "8", "9", "C",
"*", "0", "#", "D"]
# Crea un'istanza della classe Keypad
keypad = Keypad(rows_pins, cols_pins, keys)
last_key_pressed = []
# Leggi continuamente il tastierino e stampa i tasti appena premuti
while True:
pressed_keys = keypad.read()
if pressed_keys and pressed_keys != last_key_pressed:
print(pressed_keys) # Stampa la lista dei tasti premuti
last_key_pressed = pressed_keys
sleep(0.1) # Breve ritardo per ridurre il carico sulla CPU
except KeyboardInterrupt:
# Gestisce un'interruzione da tastiera (Ctrl+C) per un'uscita pulita
pass
Spiegazione del Codice
Importa le classi
DigitalOutputDeviceeButtondalla libreriagpiozeroe la funzionesleepper i ritardi.#!/usr/bin/env python3 from gpiozero import DigitalOutputDevice, Button from time import sleep
Definisce la classe
Keypad. Il metodo__init__inizializza il tastierino con i pin di riga e colonna e i tasti. Il metodoreadscansiona il tastierino e restituisce una lista dei tasti premuti.class Keypad: def __init__(self, rows_pins, cols_pins, keys): """ Initialize the Keypad with specified row and column pins and keypad layout. :param rows_pins: List of GPIO pins for the rows. :param cols_pins: List of GPIO pins for the columns. :param keys: List of keys in the keypad layout. """ # Inizializza i pin delle righe come DigitalOutputDevice self.rows = [DigitalOutputDevice(pin) for pin in rows_pins] # Inizializza i pin delle colonne come pulsanti self.cols = [Button(pin, pull_up=False) for pin in cols_pins] self.keys = keys # Imposta il layout del tastierino def read(self): """ Read the currently pressed keys on the keypad. :return: A list of pressed keys. """ pressed_keys = [] # Scansiona ogni riga e colonna per identificare i tasti premuti for i, row in enumerate(self.rows): row.on() # Attiva la riga corrente for j, col in enumerate(self.cols): if col.is_pressed: # Controlla se il pulsante della colonna è premuto # Calcola l'indice del tasto in base alla riga e colonna index = i * len(self.cols) + j pressed_keys.append(self.keys[index]) row.off() # Disattiva la riga corrente return pressed_keys
Configura i pin GPIO per righe e colonne e definisce il layout del tastierino.
try: # Configura le righe, le colonne e il layout del tastierino rows_pins = [18, 23, 24, 25] cols_pins = [10, 22, 27, 17] keys = ["1", "2", "3", "A", "4", "5", "6", "B", "7", "8", "9", "C", "*", "0", "#", "D"]
Crea un’istanza della classe
Keypadcon la configurazione specificata.try: ... # Crea un'istanza della classe Keypad keypad = Keypad(rows_pins, cols_pins, keys) last_key_pressed = []
Legge continuamente i tasti del tastierino, stampa i nuovi tasti premuti e introduce un breve ritardo per ridurre il carico sulla CPU. Gestisce un’interruzione da tastiera (come Ctrl+C) per un’uscita pulita dallo script.
try: ... # Leggi continuamente il tastierino e stampa i tasti appena premuti while True: pressed_keys = keypad.read() if pressed_keys and pressed_keys != last_key_pressed: print(pressed_keys) # Stampa la lista dei tasti premuti last_key_pressed = pressed_keys sleep(0.1) # Breve ritardo per ridurre il carico sulla CPU except KeyboardInterrupt: # Gestisce un'interruzione da tastiera (Ctrl+C) per un'uscita pulita pass