Gestione tastiere a
matrice

ultimo aggiornamento 23 giugno 2019


 

Indice

Descrizione

l tastierino numerico č una periferica di input, ne esistono di vari formati. I tasti sono disposti in formato matriciale.
La sua struttura a righe e colonne, permette di verificare facilmente con l'ausilio di un microcontrollore quale dei tasti č stato digitato tramite la lettura dei  pin di output del tastierino stesso.
Il tastierino visibile in figura ha 16 tasti e presenta un'uscita con 8 pin che permettono la lettura della matrice righe/colonne:

Riga/colonna
Schema
Riga/colonna
Libreria
Tasti collegati Pin
Colonna1 0 1-4-7-* 1
Colonna2 1 2-5-8-0 2
Colonna3 2 3-6-9-# 3
Colonna4 3 A-B-C-D 4
Riga1 0 1-2-3-A 5
Riga2 1  4-5-6-B 6
Riga3 2 7-8-9-C 7
Riga4 3 *-0-#-D 8

SCHEMA ELETTRICO

Dove trovare la tastiera

La tastiera puň essere trovata sul sito HOMOTIX, ricordo che quanti inseriranno in codice "ADRIROBOT_19" potranno utilizzare di uno speciale sconto, sono disponibili una tastiera 16 tasti e una tastiera 12 tasti.

Tutti i componenti sopra riportati sono presenti nel Kit Arduino Avanzato con Arduino Uno R3 Compatibile, venduto dal sito HOMOTIX, il kit č adatto a utenti esperti e principianti, con i componenti forniti č possibile realizzare una ampia varietŕ di progetti.

homotix

PCBA

OurPCB

Libreria KeyPad

Per facilitare la decodifica dei tasti si puň utilizzare Arduino con uno sketch che utilizza l'apposita libreria Keypad che puň essere scaricata a questo link: https://github.com/Chris--A/Keypad , oppure, molto piů facilmente utilizzare l'apposita funzione fornita dall'IDE.
Per cui andare al menu Sketch-> #includi libreria  -> Gestione librerie

ricercare keypad, saranno mostrate varie librerie, personalmente ho scelto quella realizzata da  e scritta da Mark Stanley e Alexander Brevig.

Premendo su More info apparirŕ la possibilitŕ di scelta delle versioni e il tasto Installa

Premendolo la libreria verrŕ istallata e apparirŕ la versione attuale e la scritta INSTALLED

Ora andando sotto File ->Esempi e ricercando tra le librerie personalizzate, apparirŕ quella Keypad con alcuni esempi

Funzioni della libreria KeyPad

void begin(makeKeymap(userKeymap))
Inizializza la mappa della tastiera, č uguale a userKeymap

char waitForKey()
Questa funzione resta in attesa di una pressione di un tasto
Attenzione: Blocca tutta l'esecuzione del programma fino a quando non viene premuto un tasto. Ciň significa che per esempio non lampeggiano i LED, non c'č nessun aggiornamento dello schermo LCD.

char getKey()
Restituisce il tasto che viene premuto, se presente. Questa funzione non blocca l'esecuzione del programma.

KeyState getState()
Restituisce lo stato attuale di uno qualsiasi dei tasti.
I quattro stati sono IIDLE, PRESSED, RELEASED eHOLD

boolean keyStateChanged()
Permette di sapere se vi č stato un cambiamento di stato.

setDebounceTime(unsigned int time)
Imposta la quantitŕ di millisecondi che l'utente dovrŕ tenere premuto un pulsante fino a quando lo stato HOLD č attivato.

setDebounceTime (tempo unsigned int)
Imposta la quantitŕ di millisecondi che la tastiera attenderŕ fino a che non accetta una nuova pressione del tasto / KeyEvent. Questo č il "tempo di ritardo" metodo antirimbalzo.

addEventListener(keypadEvent)
Attivare un evento se la tastiera č utilizzata.

Esempio schema minimo di collegamento

 

Breadboard 830 punti

Tastiera 16 tasti

Jumper Dupont M/M 200mm

Uno R3 ATmega328 Arduino Compatibile

Sketch di prova

Lo sketch utilizzato sotto riportato, verifica i collegamenti della tastiera  se sono corretti, premendo i vari tasti, attivando i monitor seriale  saranno stampati i caratteri riportati sui relativi tasti premuti.


Scarica il programma
/*
  test_tastiera.ino
  Il programma verifica  i collegamenti della tastiera
  se sono corretti premendo i vari tasti, attivando i monitor seriale
  saranno stampati i caratteri riportati sui relativi tasti premuti
  
  Vengono utilizzati i seguenti pin
  Pin +5V         -> +5V
  Pin GND         -> GND
  Pin Digital 5,6,7,8,9,10,11,12   -> Lettura tastiera

  Creato il 23/6/2019
  Sito web https://www.adrirobot.it
  Blog https://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
*/

// Definizione tastiera
#include <Keypad.h>

const byte ROWS = 4; // Quattro righe
const byte COLS = 4; // Quattro colonne
// Definizione mappa della tastiera
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = { 8, 7, 6, 5 }; // Riga0,1,2,3.
byte colPins[COLS] = { 12, 11, 10, 9}; // Colonna0,1,2,3
// Creazione della tastiera
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
  Serial.begin(9600);
}
void loop()
{
  char key = kpd.getKey();
  if (key) {
    Serial.println(key);
  }
}

Gestione di due relč tramite tastiera

 

Breadboard 830 punti

Tastiera 16 tasti

2 moduli relč - 5V

Jumper Dupont M/M 200mm

Uno R3 ATmega328 Arduino Compatibile

Sketch comando relč

Lo sketch utilizzato sotto riportato, gestisce due moduli relč, per attivarli occorre premere:

NOTA: dato che la disposizione dei pin dei moduli relč non č standard occorre verificare quella del proprio modello.   Anche il circuito di comando della bobina non č standard, alcune bobine si eccitano  tramite il comando HIGH e altri con il comando LOW, nel caso modificare lo sketch


Scarica il programma
/*
  tastiera_rele_new.ino
  Il programma comanda tramite una tastiera 4 righe, 4 colonne
  l'attivazione di due relč tramite la pressione di tasti 1-2
  per disattivare i relč e 4-5 per attivarli.

  Vengono utilizzati i seguenti pin
  Pin +5V         -> +5V
  Pin GND         -> GND
  Pin Digital 3   -> Attivazione relč 1
  Pin Digital 4   -> Attivazione relč 2
  Pin Digital 5,6,7,8,9,10,11,12   -> Lettura tastiera

  Creato il 27/4/2012
  Aggiornato il 23/6/2019 - verificato don IDE 1.8.5
  Sito web https://www.adrirobot.it
  Blog https://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
*/
//Definisce i pin per comandare i rele'
const int rele_1 =  3;      // Relč 1
const int rele_2 =  4;      // Relč 2

// Definizione tastiera
#include <Keypad.h>

const byte ROWS = 4; // Quattro righe
const byte COLS = 4; // Quattro colonne
// Definizione mappa della tastiera
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = { 8, 7, 6, 5 }; // Riga 0,1,2,3
byte colPins[COLS] = { 12, 11, 10, 9}; // Colonna 0,1,2,3
// Creazione della tastiera
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); 

void setup() {
  // imposta i pin digitali come uscite:
  pinMode(rele_1, OUTPUT);
  pinMode(rele_2, OUTPUT);
  digitalWrite(rele_1, HIGH);
  digitalWrite(rele_2, HIGH);
}
void loop()
{
  char key = kpd.getKey();
  if (key) // controlla che il valore sia valido.
  {
    switch (key)
    {
      case 49: //valore ascii del numero 1
        digitalWrite(rele_1, HIGH);
        break;
      case 50: //valore ascii del numero 2
        digitalWrite(rele_2, HIGH);
        break;
      case 52: //valore ascii del numero 4
        digitalWrite(rele_1, LOW);
        break;
      case 53: //valore ascii del numero 5
        digitalWrite(rele_2, LOW);
        break;
    }
  }
}

Gestione di due relč tramite tastiera - altra versione

Altra versione del comando tramite tastiera di due relč in questo caso viene utilizzato una scheda 1000Pads-Mini 2Relay board, lo sketch č identico al precedente.

Circuito di prova realizzato su breadboard

Nella foto č visibile i led rosso del relč attivato

Filmato del test

 

Elenco revisioni
23/06/2019 Aggiornato pagina
13/10/2012 Emissione preliminare
Private Policy Cookie Policy Termini e Condizioni