1 x 4 matrix tastatura
U Arduino svetu se za unos mogu koristiti razni
prekidači, potenciometri, senzori i da ih ne nabrajam. Jedno od
elegantnijih rešenja za gotove projekte su matrix tastature koje mogu
doći u raznim varijantama. Tehnički su vrlo slične i osnovna razlika je u
broju polja. Ova polja su zapravo membrane koje dodirom spajaju dva
električna provodnika i na taj način zatvaraju strujni krug. Naziv
matrix potiče od mreže vodova gde se ukrštanjem redova i kolona utvrđuje
koje je polje zapravo pritisnuto. Cela priča ima smisla kod većih
tastatura, većih po broju polja, ali kod ove to i nije toliko izraženo. S
obzirom da imamo samo jedan red sa četiri kolone, za povezivanje i
projektovanje se može koristiti i prosta logika za četiri obična taster
prekidača.
Sama
tastatura je dimenzija 69x20mm po kome su raspoređena četiri tastera sa
ispisanim brojevima. Stariji čitaoci će se setiti ovakvih senzorskih
tastera sa Sinclair računara (ZX81 bi trebalo da imam tu negde). Kao i
kod tadašnjih računara i ovde se javlja isti problem. Potrebno je
pritisnuti membranu do kraja jer vrlo često se dešava da se ne pretisne
taman toliko da ne dođe do spajanja opni. Na poleđini je duplolepljiva
traka tako da se ova tastatura vrlo lako može ugraditi u gotov projekat.
Za
povezivanje tastatura koristi pet ženskih dupont hedera koji se
nadovezuju na dva flet kabla.Gornji kabl ima samo jedan zajednički vod i
ide na pin 1 na hederu. Donji kabl ima četiri voda koji idu na pinove 2-5 gde treba voditi računa prilikom povezivanja. Naime, oznake na
tastaturi ne prate redne brojeve pinova, već se preklapaju. Na slici
možete videti na šta mislim. Ovo nije nikakav problem, samo je potrebno
pravilno povezati.
Za
ovaj primer sam iskoristio već gotov skeč iz prethodnog članka o
7-segmentnom displeju, a ostalo mi je sve već povezano na Megi. Dakle,
manje prepravke skeča i povezivanja.
Skeč vezan za displej neću
ponovo objašnjavati. Označili smo pinove Mege na koje smo vezali
tastaturu. Iz razloga što tasteri ne prate pinove, zato smo pinove
tastature malo izmešali:
- pin MEGA 33 -> pin matrix 5
- pin MEGA 31 -> pin matrix 4
- pin MEGA 37 -> pin matrix 3
- pin MEGA 35 -> pin matrix 2
/*-----------------------------------------------------------------*
* Skeč za potrebe članka na www.itstreet.org
* Parts from: www.hacktronics.com/tutorials/arduino-and-7-segment-led.html
* Author: Petrović Dejan
* Date: 12/16/2017
* Arduino MEGA, 7 segment display, resistor 220R, 1x4 matrix keyboard
*-----------------------------------------------------------------*/
byte brojke_i_slova[16][7]= {{0,0,0,0,0,0,1},//0
{1,0,0,1,1,1,1},//1
{0,0,1,0,0,1,0},//2
{0,0,0,0,1,1,0},//3
{1,0,0,1,1,0,0},//4
{0,1,0,0,1,0,0},//5
{0,1,0,0,0,0,0},//6
{0,0,0,1,1,1,1},//7
{0,0,0,0,0,0,0},//8
{0,0,0,1,1,0,0},//9
{0,0,0,1,0,0,0},//a
{1,1,0,0,0,0,0},//b
{0,1,1,0,0,0,1},//c
{1,0,0,0,0,1,0},//d
{0,1,1,0,0,0,0},//e
{0,1,1,1,0,0,0} //f
}; // pravimo niz brojeva i slova gde za zajednicku anodu 0 znaci upaljena LED
const int matrixPin[] = {33,31,37,35}; //pinovi Mege gde smo povezali tastaturu
int matrixState = 0; //stanje tastera na tastaturi
void setup() {
// sledeci pinovi se koriste za povezivanje za displejem
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
dotWrite(1); // tacku gasimo, s tim da moze i da se upali sa 0 umesto 1
//u for petlji stavljamo sve pinove displeja na INPUT
for(int x=0; x<4; x++)
{
pinMode(matrixPin[x], INPUT_PULLUP);
}
//u for petlji stavljamo sve LED displeja na HIGH, to jest gasimo ga
for(byte segBroj2=2; segBroj2<9; segBroj2++){
digitalWrite(segBroj2, HIGH);
}
Serial.begin(9600);
}
// funkcija koja poziva ispisivanje logicke 0 ili 1 na pinu 9 za tacku
void dotWrite(byte dot) {
digitalWrite(9, dot);
}
// funkcija kojom u for petlji ispisujemo logicku 0 ili 1 na segmentima LED
// krecemo od pina 2 do pina 8 (brojimo od 0 do 7)
void displejWrite(byte digit) {
byte pin = 2;
for (byte segBroj = 0; segBroj < 7; ++segBroj) {
digitalWrite(pin, brojke_i_slova[digit][segBroj]);
++pin;
}
}
// u for petlji od znaka 16 a u ovom slucaju slovo F ispisujemo u nazad do 0
// nakon 4 sekunde idemo ponovo
void loop() {
for(int x=0; x<4; x++)
{
matrixState=digitalRead(matrixPin[x]);//citamo stanje tastature
if (matrixState == LOW) { //ako je na nekom tasteru LOW
Serial.println((char)(x+'1'));//pretvaramo pin u broj
displejWrite((char)(x+1));//isto ali kao redni broj niza i ispisujemo odgovarajuci broj na displeju
}
}
}
Uz vrlo malo prepravki prethodnog skeča smo implementirali i ovu tastaturu. Zajedno ili odvojeno, tastatura se može koristiti u razne svrhe. U okviru skeča se čitanje tasatature može razdvojiti ako je to potrebno, a tastatura se može koristiti i kao četiri tactile prekidača.