Billentyűzet mátrix


Ebben a projektben jelszó bevitelére használjuk a 4x4-es billentyűz mátrixunkat. A projekt kész könyvtárakat használ ezért igazán nem mutatja be a mátrix kezelését, de pár szóban azért beszélek róla.
A 4x4-es mátrix azt jelenti, hogy 4sorban és 4 oszlopban helyezkednek el a billentyűk. Egy-egy billentyűt egy oszlop és egy sor azonosít. Pl.: ha az első sort tápfeszre kapcsoljuk és lenyomjuk az 1-est akkor az első oszlop kimenetén jelentkezik a tápfeszünk, tehát az 1-est az első sor és első oszlop azonosítja. Az egész billentyűzetre ez úgy működik, hogy a sorok bemenő tápfeszét folyamatosan léptetjük(csak az első sor aktív, csak a második, csak a harmadik..) közben minden léptetés után figyeljük a oszlopok kimenetén jelentkező tápfeszültséget. Az így megállapított értéket ezután az Arduino boardunk dolgozza fel és megteszi a megfelelő lépéseket.

Nézzük a kapcsolást:

A billentyűzetet egyenesen rákötjük a Arduino digitális portjaira, plusz még egy kimenetet a visszajelző ledre.
A pontos lábkiosztás:
billentyűzet           Arduino
ROW0                  13
ROW1                  12
ROW2                  11
ROW3                  10
COL0                    9
COL1                    8
COL2                    7
COL3                    6
LED kimenet         3
GND LED            GND

A LED-et egy 270 ohmos áramkorlátozó ellenálláson keresztül kössük be.

A billentyűzet  csatlakozóját  a próbapanelhóz használatos vezetékekkel kötjük az alaplapunkhoz.

Könyvtárak:
Password könyvtár letölthető a http://www.arduino.cc/playground/uploads/Code/Password.zip
Keypad könyvtár: http://www.arduino.cc/playground/uploads/Code/Keypad.zip
A zip-eket csomagoljuk ki, majd másoljuk be a könyvtárakat az Arduino IDE/ Librarie könyvtárába. Indítsuk újra az IDEt.

A kód:
/*
Nathan Sobieck nyomán átalakítva
*/

//* jelszó ellenőrzése
//# jelszó törlése
/////////////////////////////////////////////////////////////////

#include <Password.h>
#include <Keypad.h>
int pin3 = 3;
Password password = Password( "4335AD" );//itt állíthatjuk be a kívánt jelszót

const byte ROWS = 4; // négy sor
const byte COLS = 4; // négy oszlop
// definiáljuk a gombokat
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte rowPins[ROWS] = { 13,12,11,10 };// a sorok hozzárendelése az Arduinohoz
byte colPins[COLS] = { 9,8,7,6 };// az oszlopok hozzárendelése

// billentyűzet létrehozása objektumként
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){

Serial.begin(9600);
keypad.addEventListener(keypadEvent); //billentyűzet esemény
pinMode(pin3,OUTPUT);
digitalWrite(pin3,LOW);
}

void loop(){
keypad.getKey();
}

//billentyűzet esemény során megvizsgálja annak állapotát
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Pressed: ");
Serial.println(eKey);
switch (eKey){//megvizsgálja a lenyomott gombokat ha "*" akkor meghívja az összehasonlító függvényt
//ha "#" akkor reseteli az eltárolt billentyű értékeket.
case '*': checkPassword(); break;
case '#': password.reset(); break;
default: password.append(eKey);
}
}
}

void checkPassword(){
if (password.evaluate()){
Serial.println("Success");
digitalWrite(pin3,HIGH);
//a beírt és tárolt jelszót összehasonlítja és ha egyezik bekapcsolja a ledet
}else{
Serial.println("Wrong");
digitalWrite(pin3,LOW);
//ha nem egyezik a led kikapcsolt állapotba kerül vagy marad.
}
}


A program működése: be billentyűzünk egy számot amit a csillag lenyomása után összehasonlít a passwordban eltárolt értékkel, ha megegyezik bekapcsolja a ledet ha nem akkor kikapcsolt állapotban marad vagy éppen kikapcsolja azt.