Klaviatūros yra puikus būdas leisti vartotojams bendrauti su jūsų projektu. Juos galite naudoti norėdami naršyti meniu, įvesti slaptažodžius ir valdyti žaidimus bei robotus.
Šioje pamokoje aš jums parodysiu, kaip nustatyti „Arduino“ klaviatūrą. Pirmiausia paaiškinsiu, kaip „Arduino“ aptinka klavišų paspaudimus, tada parodysiu, kaip surasti bet kurios klaviatūros smeigtuką. Kaip paprastą pavyzdį, aš jums parodysiu, kaip atsispausdinti serijos monitoriaus ir LCD ekrano klavišus. Galiausiai parodysiu, kaip suaktyvinti 5V relę, kai teisingai įvedamas slaptažodis.
Šiame straipsnyje naudosiu 4X4 matricos membranos klaviatūrą, tačiau taip pat yra 3X4 matricos klaviatūrų kodas ir laidų schemos. Man patinka membraninio stiliaus klaviatūros, nes jos yra plonos ir taip pat turi lipnų pagrindą, todėl galite jas priklijuoti ant daugumos plokščių paviršių. Taip pat galite gauti telefono stiliaus klaviatūras su storesniais mygtukais, jei jums labiau patinka šis stilius. Netgi išgelbėti senųjų telefonų klaviatūros veiks su „Arduino“.
Kaip veikia klaviatūros
Klaviatūros mygtukai išdėstyti eilėmis ir stulpeliais. 3X4 klaviatūroje yra 4 eilutės ir 3 stulpeliai, o 4X4 klaviatūroje yra 4 eilutės ir 4 stulpeliai:
Po kiekvienu raktu yra membraninis jungiklis. Kiekvienas jungiklis iš eilės yra sujungtas su kitais eilės jungikliais laidžiu pėdsaku po trinkele. Kiekvienas kolonos jungiklis yra sujungtas vienodai – viena jungiklio pusė laidžiu pėdsaku yra sujungta su visais kitais tos kolonos jungikliais. Kiekviena eilutė ir stulpelis išvedami į vieną kaištį, iš viso 8 kaiščius 4X4 klaviatūroje:
Paspaudus mygtuką, jungiklis tarp stulpelio ir eilutės pėdsakų uždaromas, leidžiant srovei tekėti tarp stulpelio kaiščio ir eilutės kaiščio.
4X4 klaviatūros schema parodo, kaip yra sujungtos eilutės ir stulpeliai:
„Arduino“ nustato, kuris mygtukas yra paspaustas, aptikdamas prie mygtuko prijungtą eilutės ir stulpelio kaištį.
Tai vyksta keturiais etapais:
1. Pirma, kai nėra paspausti jokie mygtukai, visi stulpelių kaiščiai laikomi AUKŠTAI, o visi eilutės kaiščiai laikomi ŽEMAI:
2. Paspaudus mygtuką, stulpelio kaištis traukiamas LOW, nes srovė iš HIGH stulpelio teka į LOW eilutės kaištį:
3. „Arduino“ dabar žino, kuriame stulpelyje yra mygtukas, todėl dabar jam tereikia rasti eilutę, kurioje yra mygtukas. Tai daro perjungdamas kiekvieną eilutės smeigtuką HIGH ir tuo pačiu perskaitydamas visą stulpelį kaiščiai, kad būtų galima nustatyti, kuris stulpelio kaištis grįžta į HIGH:
4. Kai stulpelio kaištis vėl eina HIGH, „Arduino“ rado eilutės kaištį, prijungtą prie mygtuko:
Iš aukščiau pateiktos diagramos matote, kad 2 eilutės ir 2 stulpelio derinys galėjo reikšti tik tai, kad buvo nuspaustas mygtukas 5.
Prijunkite klaviatūrą prie „Arduino“
Daugelio membraninių klaviatūrų kaiščių išdėstymas atrodys taip:
Laikykitės toliau pateiktų schemų, kad prijungtumėte klaviatūrą prie „Arduino Uno“, priklausomai nuo to, ar turite 3X4, ar 4X4 klaviatūrą:
Kaip rasti savo klaviatūros kištuką
Jei klaviatūros smeigtukų išdėstymas neatitinka aukščiau pateiktų, galite išsiaiškinti kaiščius, kad tai išsiaiškintumėte. Turėsite sukurti bandymo grandinę, prijungdami šviesos diodą ir srovės ribotuvą prie „Arduino“ (arba bet kokio 5 V maitinimo šaltinio):
Pirmiausia sužinokite, kurie klaviatūros kaiščiai yra prijungti prie mygtukų eilučių. Įkiškite įžeminimo laidą į pirmąjį kaištį kairėje. Paspauskite bet kurį 1 eilutės mygtuką ir laikykite nuspaudę. Dabar įkiškite teigiamą (raudoną) laidą į kiekvieną kitą kaištį. Jei šviesos diodas užsidega prie vieno iš kaiščių, paspauskite ir laikykite nuspaudę kitą mygtuką 1 eilutėje, tada vėl įkiškite teigiamą laidą į kiekvieną kitą kaištį. Jei šviesos diodas užsidega ant kito kaiščio, tai reiškia, kad įžeminimo laidas įkištas į 1 eilutės kaištį. Jei nė vienas iš 1 eilutės mygtukų nedega šviesos diodo, įžeminimo laidas nėra prijungtas prie 1 eilutės. Dabar įžeminimo laidą perkelkite į kitą kaištį, paspauskite mygtuką kitoje eilėje ir pakartokite aukščiau aprašytą procesą, kol radome kiekvienos eilutės kaištį.
Norėdami išsiaiškinti, prie kurių kaiščių yra prijungti stulpeliai, įkiškite įžeminimo laidą į kaištį, apie kurį žinote, kad yra 1 eilutė. Dabar paspauskite ir palaikykite bet kurį iš tos eilutės mygtukų. Dabar įkiškite teigiamą laidą į kiekvieną likusį kaištį. Šviesos diodą užsidega kaištis, kuris yra prijungtas prie to mygtuko stulpelio. Dabar paspauskite dar vieną mygtuką toje pačioje eilutėje ir įkiškite teigiamą laidą į kiekvieną kitą kaištį. Pakartokite šį procesą kiekvienam kitam stulpeliui, kol kiekvieną atvaizduosite.
Klaviatūros programavimas
Norėdami parodyti, kaip nustatyti klaviatūrą, parodysiu, kaip spausdinti kiekvieną paspaudimą pas serijos monitorių.
Įdiekite biblioteką
Mes naudosime Mark Stanley ir Alexander Brevig „Keypad“ biblioteką. Ši biblioteka rūpinasi smeigtukų nustatymu ir skirtingų stulpelių bei eilučių apklausa. Norėdami įdiegti klaviatūros biblioteką, eikite į „Eskizas“> „Įtraukti biblioteką“> „Tvarkyti bibliotekas“ ir ieškokite „klaviatūra“. Spustelėkite biblioteką, tada spustelėkite įdiegti.
4X4 klaviatūros kodas
Įdiegę klaviatūros biblioteką, galite įkelti šį kodą į „Arduino“, jei naudojate 4X4 klaviatūrą:
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', "https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/#", 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
3X4 klaviatūros kodas
Jei naudojate 3X4 klaviatūrą, galite naudoti šį kodą:
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', "https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/#"}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
3 ir 4 eilutės aukščiau esančiame kode nustato eilučių ir stulpelių skaičių klaviatūroje.
6–11 eilutėse nurodoma, kurie simboliai spausdinami, kai klaviatūroje paspaudžiamas tam tikras mygtukas. Simboliai išdėstyti taip, kaip jie rodomi klaviatūroje. Jei jūsų klaviatūra yra kitokio išdėstymo, galite nustatyti, kurie simboliai spausdinami paspaudus mygtuką. Pavyzdžiui, tarkime, kad jūsų klaviatūroje kairėje, o ne dešinėje, yra raidžių stulpelis. Jūs tiesiog pakeistumėte jį į šį:
char hexaKeys[ROWS][COLS] = {
{'A', '1', '2', '3'},
{'B', '4', '5', '6'},
{'C', '7', '8', '9'},
{'D', '*', '0', "https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/#"}
};
Įkėlę kodą atidarykite nuoseklųjį monitorių. Paspaudus klavišą, vertė bus išspausdinta:
Skystųjų kristalų ekrano naudojimas su klaviatūra
Dabar pažiūrėkime, kaip atspausdinti klavišus paspaudus LCD. 4X4 klaviatūros naudoja 8 kontaktus, o 3X4 klaviatūros naudoja 7 kaiščius. Tam reikia daug smeigtukų, todėl naudosiu I2C įgalintą skystųjų kristalų ekraną, nes norint prisijungti prie „Arduino“ reikia tik 4 laidų.
Įdiekite „LiquidCrystal_I2C“ biblioteką
Norėdami „Arduino“ naudoti „I2C“ įgalintą skystųjų kristalų ekraną, turėsite įdiegti Marco Schwartzo „LiquidCrystal I2C“ biblioteką. Ši biblioteka yra maloni, nes joje yra dauguma funkcijų, galimų standartinėje „LiquidCrystal“ bibliotekoje. Norėdami jį įdiegti, atsisiųskite žemiau esantį ZIP failą, tada eikite į „Eskizas“> „Įtraukti biblioteką“> „Pridėti .ZIP biblioteką“:
„LiquidCrystal I2C.zip“
Vielos biblioteka
„Wire“ biblioteka reikalinga norint pridėti „I2C“ ryšio palaikymą. Jis tiekiamas su „Arduino IDE“, todėl jo nereikia įdiegti. Bet jei dėl kokių nors priežasčių jis nėra įdiegtas jūsų sistemoje, eikite į „Eskizas“> „Įtraukti biblioteką“> „Tvarkyti bibliotekas“ ir ieškokite „laidas“, kad ją įdiegtumėte.
Prijunkite klaviatūrą ir skystųjų kristalų ekraną
Įdiegę bibliotekas, prijunkite „LCD“ žemę ir „Vcc“ kaiščius prie „Arduino“, tada prijunkite LCD SDA ir SCL kaiščius pagal toliau pateiktą lentelę skirtingoms „Arduino“ plokštėms:
Tada prijunkite klaviatūrą prie „Arduino“. Tai turėtų atrodyti maždaug taip („Arduino Uno“):
Išvesties į LCD ekranas kodas
Kai viskas bus prijungta, įkelkite šį kodą į „Arduino“:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', "https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/#", 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x21, 16, 2);
void setup(){
lcd.backlight();
lcd.init();
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(customKey);
}
}
20 eilutėje turėsite pridėti savo LCD I2C adresą:
LiquidCrystal_I2C lcd(0x21, 16, 2);
Mano LCD I2C adresas yra 0x21, bet jūsų adresas greičiausiai bus kitoks. Jūsų LCD I2C adresas turėtų būti pateiktas duomenų lape, bet jei ne, jį galite rasti paleidę šį „I2C_Scanner“ eskizą.
Norėdami suaktyvinti relę, naudokite slaptažodį
Viena iš naudingiausių klaviatūros programų yra naudoti ją įvedant raktus. Galite nustatyti slaptažodį ir „Arduino“ suaktyvinti relę ar kitą modulį, jei slaptažodis teisingas. Šis kodas suaktyvins 5 V relę, kai slaptažodis bus įvestas teisingai:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define Password_Length 8
int signalPin = 12;
char Data[Password_Length];
char Master[Password_Length] = "123A456";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', "https://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/#", 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x21, 16, 2);
void setup(){
lcd.init();
lcd.backlight();
pinMode(signalPin, OUTPUT);
}
void loop(){
lcd.setCursor(0,0);
lcd.print("Enter Password:");
customKey = customKeypad.getKey();
if (customKey){
Data[data_count] = customKey;
lcd.setCursor(data_count,1);
lcd.print(Data[data_count]);
data_count++;
}
if(data_count == Password_Length-1){
lcd.clear();
if(!strcmp(Data, Master)){
lcd.print("Correct");
digitalWrite(signalPin, HIGH);
delay(5000);
digitalWrite(signalPin, LOW);
}
else{
lcd.print("Incorrect");
delay(1000);
}
lcd.clear();
clearData();
}
}
void clearData(){
while(data_count !=0){
Data[data_count--] = 0;
}
return;
}
10 eilutėje esantį slaptažodį galite pakeisti pakeisdami 123A456
tekstas su savo slaptažodžiu:
char Master[Password_Length] = "123A456";
Slaptažodžio ilgį reikia nustatyti 5 eilutėje:
#define Password_Length 8
Aukščiau pateiktame pavyzdyje slaptažodis yra tik 7 simbolių ilgio, tačiau iš tikrųjų slaptažodžio ilgis yra didesnis nei 7, nes eilutės pabaigoje yra pridėtas nulinis simbolis. Pvz., Jei jūsų slaptažodis yra 5 simbolių ilgio, slaptažodžio ilgiui įveskite 6.
Išvesties kaištis, įjungiantis relę, yra apibrėžtas 7 eilutėje:
int signalPin = 12;
Prijungę viską prie „Arduino“, turėtumėte turėti tai, kas atrodo taip:
Na apie tai. Visai nesunku nustatyti klaviatūrą. Manau, kad atlikę nedidelį bandymą ir klaidą turėtumėte sugebėti pakeisti aukščiau esantį kodą, kad galėtumėte dirbti su daugeliu projektų, kuriuos norite naudoti …