Kaip nustatyti klaviatūrą „Arduino“

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.

„PCBWay“ skelbimas

Š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.

BONUSAS: Aš sukūriau greitą šios mokymo programos pradžios vadovą, kurį galite atsisiųsti ir grįžti vėliau, jei negalite to nustatyti dabar. Tai apima visus veiksmus, diagramas ir kodą, kurių jums reikia norint pradėti.

Š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:

„Arduino“ klaviatūros pamoka - 3X4 ir 4X4 klaviatūros

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:

Kaip nustatyti klaviatūrą „Arduino“ - užpakalinėje klaviatūros pusėje

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“ klaviatūros pamoka - 4X4 klaviatūros schema

„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:

Kitas „PCB“ skelbimas

„Arduino“ klaviatūros pamoka - kaip veikia klaviatūra, 1 ŽINGSNIS

2. Paspaudus mygtuką, stulpelio kaištis traukiamas LOW, nes srovė iš HIGH stulpelio teka į LOW eilutės kaištį:

„Arduino“ klaviatūros pamoka - kaip veikia klaviatūra, 2 ŽINGSNIS

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:

„Arduino“ klaviatūros pamoka - kaip veikia klaviatūra, 3 ŽINGSNIS

4. Kai stulpelio kaištis vėl eina HIGH, „Arduino“ rado eilutės kaištį, prijungtą prie mygtuko:

„Arduino“ klaviatūros pamoka - kaip veikia klaviatūra, 4 ŽINGSNIS

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:

„AllPCB“ skelbimas

„Arduino“ klaviatūros pamoka - 4X4 ir 3X4 klaviatūros kaiščių schema

Laikykitės toliau pateiktų schemų, kad prijungtumėte klaviatūrą prie „Arduino Uno“, priklausomai nuo to, ar turite 3X4, ar 4X4 klaviatūrą:

„Arduino“ klaviatūros pamoka - 4X4 ir 3X4 klaviatūros prijungimo schema

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):

„Arduino“ klaviatūros pamoka - „Pinout“ radimas

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:

Kaip nustatyti klaviatūrą „Arduino“ - serijos monitoriaus klavišų išvesties išvestis

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ą“:

Grandinės pagrindų ZIP piktograma „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:

Kaip nustatyti klaviatūrą „Arduino“ - „Arduino I2C“ kaiščiuose

Tada prijunkite klaviatūrą prie „Arduino“. Tai turėtų atrodyti maždaug taip („Arduino Uno“):

Kaip nustatyti klaviatūrą „Arduino - I2C“ LCD išvesties laidų schemoje

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:

„Arduino“ klaviatūros pamoka - slaptažodžiu valdoma 5 V relė

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 …

Parašykite komentarą