Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in /home/itstreet/public_html/classes/CMySQL.php on line 22

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/itstreet/public_html/classes/CMySQL.php on line 24
ITstreet -1 x 4 matrix tastatura
Preskoči na sadržaj

ITstreet postovi

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
Peti pin ide na GND.Stanje tastera (matrixState) inicijalno stavljamo na LOW. S obzirom da nam jasno treba logička 0 i 1 trebalo bi dodati i po jedan prateći otpornik. Ja sam se odlučio za uključivanje onog u Arduinu (INPUT_PULLUP). U okviru setup funkcije u for petlji sve pinove displeja stavljamo na HIGH, to jest, gasimo displej. U loop funkciji čekamo promenu stanja tastature i ukoliko je neki taster pritisnut, a znamo koji je, ispisujemo broj tastera na terminalu i displeju.

/*-----------------------------------------------------------------*
 * 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.

Ostavite poruku

Vaša mejl adresa neće biti objavljena.Označena polja su obavezna*