Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime speciali.

  • Sconti esclusivi: Approfitta di sconti riservati sui nostri prodotti più recenti.

  • Promozioni festive e concorsi: Partecipa a concorsi e promozioni durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

2.1.8 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.

../_images/list_2.1.5_keypad.png

È sicuramente comodo acquistare un kit completo, ecco il link:

Nome

ARTICOLI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link qui sotto.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Tastierino

-

Schema Elettrico

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

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image186.png

Passo 2: Apri il file del codice.

cd ~/raphael-kit/python/

Passo 3: Esegui.

sudo python3 2.1.8_Keypad.py

Dopo l’esecuzione del codice, i valori dei pulsanti premuti sul tastierino (valore del pulsante) verranno stampati sullo schermo.

Codice

Nota

Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice qui sotto. Ma prima devi accedere al percorso del codice come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

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)

# Definisci una funzione destroy per pulire tutto dopo che lo script è finito
def destroy():
    # Rilascia le risorse
    GPIO.cleanup()

if __name__ == '__main__':     # Il programma inizia da qui
    try:
        setup()
        while True:
            loop()
    except KeyboardInterrupt:   # Quando viene premuto 'Ctrl+C', il programma destroy() verrà eseguito.
        destroy()

Spiegazione del Codice

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 = []

Dichiara ogni tasto della tastiera a matrice nell’array keys[] e definisci i pin di ogni riga e colonna.

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)

Questa è la parte della funzione principale che legge e stampa il valore del pulsante.

La funzione keyRead() leggerà lo stato di ogni pulsante.

L’istruzione if len(pressed_keys) != 0 e last_key_pressed != pressed_keys serve a determinare

se un tasto è premuto e lo stato del pulsante premuto. (Se premi '3' quando premi '1', la condizione è valida.)

Stampa il valore del tasto attualmente premuto quando la condizione è valida.

L’istruzione last_key_pressed = pressed_keys assegna lo stato di ciascuna valutazione a un array last_key_pressed per facilitare il prossimo ciclo di valutazione.

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

Questa funzione assegna un livello alto a ciascuna riga a turno, e quando il pulsante nella colonna viene premuto, la colonna in cui si trova il tasto riceve un livello alto. Dopo che il ciclo a due livelli viene valutato, il valore del pulsante il cui stato è 1 viene memorizzato nell’array pressed_keys.

Se premi il tasto “3”:

../_images/image187.png

rowPins[0] è impostato su alto, e colPins[2] riceve livello alto.

colPins[0], colPins[1], colPins[3] ricevono livello basso.

Ci sono quattro stati: 0, 0, 1, 0; e scriviamo '3' in pressed_keys.

Quando rowPins[1], rowPins[2], rowPins[3] vengono impostati su alto, colPins[0] ~ colPins[4] ricevono livello basso.

Il ciclo si interrompe e restituisce pressed_keys = ‘3’.

Se premi i tasti ‘1’ e ‘3’, restituirà pressed_keys = [‘1’,’3’].

Immagine del Fenomeno

../_images/image188.jpeg