Selles postituses pöörame tähelepanu klahvistikele (keypad), mida saame hõlpsasti Arduinoga ühendada ja mingit informatsiooni edasi anda. Seda saab kasutada näiteks koodiluku ja kalkulaatorite loomisel. Klahvistikke on loodud erineva suuruse ja tehnoloogiaga. Minul on hetkel laual 4×4 painduv ja nuppudega klahvistik.
Klahvistiku tööpõhimõte
Põhimõttelt on need kõik sarnased. Nupud on paigutatud ridadesse ja veergudeses. Meie puhul siis 4 rida ja 4 veergu. Millist nuppu vajutatakse tuvastataksegi rea ja veeru ristumise kohas.
Klahvistiku ühendamine Arduinoga
Kasutamiseks ühendame need Arduino pesadesse 2-9.
Ja et meil oleks lihtsam koodi kirjutada laeme alla teegi library.zip faili ning lisame selle programmi Sketch>Include Library>Add .ZIP Library…
Nüüd enne koodi kirjutamist peame lisama Keypad.h teegi ja ülejäänud koodi. Esialgu loome koodi, mis tuvastab kasutaja klahvivajutusi ning kuvab need konsooliaknas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <Keypad.h> const byte numRows = 4; //neli rida const byte numCols = 4; //neli veergu //klahvide väärtused char keymap[numRows][numCols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //pordid kuhu ühendasime klahvistiku viigud byte rowPins[numRows] = {9,8,7,6}; byte colPins[numCols] = {5,4,3,2}; //loome uue objekti minu klahvide jaoks Keypad minuKlahvid = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); void setup() { Serial.begin(9600); //kuvame klahvi väärtuse konsoolis } void loop() { //programm tuvastab millist klahvi vajutasid ja väljastab selle väärtuse char klahv = minuKlahvid.getKey(); if (klahv != NO_KEY){ Serial.print(klahv); } } |
Funktsionaalsuse lisamine
Lisame natuke funktsionaalsust ja tekitame nö. suletus ukse kontrolli. Kui kasutaja on parooli õigesti sisestanud, siis avame “ukse” ja näitame rohelist LED’i. Kui uks on suletud, siis punast. Koodi kontrollimisel kasutame lihtsat meetodit. Kui esimene sümbol on arvatud, siis kontrollime järgmist jne. Kui kõik arvatud, siis * või # abil saame “ukse” jälle sulgeda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <Keypad.h> const byte numRows = 4; //neli rida const byte numCols = 4; //neli veergu //klahvide väärtused char keymap[numRows][numCols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //pordid kuhu ühendasime klahvistiku viigud byte rowPins[numRows] = {9,8,7,6}; byte colPins[numCols] = {5,4,3,2}; //loome uue objekti minu klahvide jaoks Keypad minuKlahvid = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); char password[] = "789A"; int pos = 0; int red = 12; int green = 13; void setup() { Serial.begin(9600); //kuvame klahvi väärtuse konsoolis pinMode(red, OUTPUT); pinMode(green, OUTPUT); LukuOlek(true); //kui see olek on true, siis on "uks lukus" } void loop() { //programm tuvastab millist klahvi vajutasid ja väljastab selle väärtuse char klahv = minuKlahvid.getKey(); //kui klahvi on vajutatud, siis kuvame tärni if (klahv != NO_KEY){ Serial.print("*"); } //kui vajutada * või #, siis alustatakse kontrolli algusest if(klahv=='*' || klahv=='#'){ pos = 0; LukuOlek(true); } //kui sisestus klapib, siis muudetakse indeksit ja toimub uus kontroll if(klahv == password[pos]){ pos++; } //kui kõik on arvatud, siis avatakse "uks" if(pos==strlen(password)){ LukuOlek(false); } delay(100); } //funktsioon vastavate tulukeste kontrolliks void LukuOlek(int locked){ if(locked){ digitalWrite(red, HIGH); digitalWrite(green, LOW); Serial.print("\nLukus. Sisesta parool:"); }else{ digitalWrite(red, LOW); digitalWrite(green, HIGH); Serial.print("\nAvatud. Sulgemiseks vajuta * v6i #"); } } |
Igaks juhuks joonise ka :)
Ülesanded
Lisan siia mõningad ülesanded lahendamiseks. Kui hätta jääd, siis võid abi leida Arduino kursuselt: https://www.metshein.com/course/arduino/
- Suhtle kasutajaga läbi LCD ekraani
- Kasuta helisignaale klahvivajutustel
- Kasuta “ukse” avamiseks servomootorit, releed vms
- Muuda kood turvalisemaks. Kaitse näiteks spämmimise ees – et kui kasutaja on vajutanud ühe sümboli rohkem kui paroolis on märke, hakkab midagi vilkuma või karjuma
- Loo projekt, kus ma saan sisse/välja lülitada “erinevate ruumide” valgustuse ja võimalus neid korraga sisse/välja lülitada.
- Muuda süsteem juhmevabaks (bluetooth või wifi)
0 responses on "4x4 klahvistik ja Arduino"