Sisukord:

Üks pin 4 × 4 klaviatuur: 10 sammu
Üks pin 4 × 4 klaviatuur: 10 sammu

Video: Üks pin 4 × 4 klaviatuur: 10 sammu

Video: Üks pin 4 × 4 klaviatuur: 10 sammu
Video: ⌨️ ЛУЧШАЯ В РОССИИ и УКРАИНЕ! МЕХАНИЧЕСКАЯ КЛАВИАТУРА Dark Project KD87A Gateron Cap Teal обзор 2024, November
Anonim
Ühe nööpnõelaga 4 × 4 klahvistik
Ühe nööpnõelaga 4 × 4 klahvistik

Iga kord, kui näen klahvistikku, on sellel palju nööpnõelu, see on teie Arduino nööpnõelte suur raiskamine, nii et kas me saame juhtida ühe ja ainult ühe nööpnõelaga klaviatuuri?. Vastus on siin.

Samm: materjalide arve

Materjalide arve
Materjalide arve

Riistvara:

01 Arduino UNO

02 Leivalauad

01 LCD koos I2C -ga

16 Vajutage nuppe

04 takistid 1,5 kΩ

04 takistid 620 Ω

04 takistid 220 Ω

08 takistid 100 Ω

01 takisti 1 kΩ

07 Jumper juhtmed

Tarkvara:

Arduino IDE on teie arvutisse installitud

2. samm: skeem ja Cicruit

Skeem ja Cicruit
Skeem ja Cicruit
Skeem ja Cicruit
Skeem ja Cicruit

Kogu idee seisneb selles, et meil on 4*4 maatriks nuppudega, mis on vertikaalselt ühendatud maapinnaga parema juhtme ja horisontaalselt teise juhtme (nupujuhtme) ja takistitega 1,5 kΩ, 620Ω, 220Ω ja 100Ω. 4 rida on ühendatud nelja 100Ω takistiga, nagu on näidatud skemaatiliselt.

Iga kord, kui vajutate nuppu, sulgete vooluahela ja vool läbib erineva tee ja erineva takisti ahela, seetõttu saab tihvt A0 iga nupu jaoks erineva analoogi. Kõik, mida praegu vajate, on kodeerimine.

3. samm: kood

#kaasake

#kaasake

LiquidCrystal_I2C LCD (0x3f, 20, 4);

int Nupp = A0;

int lugemisväärtus;

tühine seadistus ()

{

Seriaalne algus (9600);

lcd.begin ();

pinMode (nupp, INPUT);

lcd.taustavalgus ();

lcd.print ("Tere maailm");

viivitus (2000);

lcd.clear ();

lcd.print ("Üks pin 4*4 klahvistik");

viivitus (2000); }

tühine tsükkel ()

{

readvalue = analogRead (Button);

Serial.println (lugemisväärtus);

if (readvalue == 852) {lcd.clear (); lcd.print ("A");}

else {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

else {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

else {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

else {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

else {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

else {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

else {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

else {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

else {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}

else {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

else {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}

else {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

else {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}

else {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}}

4. samm: väärtuste korrigeerimine

Väärtuste korrigeerimine
Väärtuste korrigeerimine

Seeriamonitori avamisel näitab see väärtust 1023, kui vajutate nuppu, annab see teile uue näidu, peate need väärtused võtma ja koodi muutma

Samm: projekt pärast kriitikat ja ülevaadet

Projekt pärast kriitikat ja ülevaadet
Projekt pärast kriitikat ja ülevaadet

Pole kahtlust, et oleme kõik siin, et õppida ja jagada oma teadmisi, tänu mõnedele kogukonna inimeste kommentaaridele, mis olid väga kasulikud, otsustasin oma projekti veidi kohandada ja täiustada:

Riistvara:

Otsustasin joota kõik PCB komponendid, et vältida leivaplaatide halva ühenduse probleemi.

Kood:

Sõber soovitas mul kasutada tarkvara väljalülitamist ja see on lihtsalt tsükkel (näiteks "jaoks" silmus), et programm võtaks lugemise valimiseks aega, see tähendab, et see teeb palju lugemist (minu eksamil 500) ainult viimane.

jaoks (i = 1; i <= 500; i ++) {// võtke ainult 500. analoog

value = analogRead (Button);} // see aitab veidi aega võtta ja vältida halbu näitu

Teine sõber tänu temale soovitas mul võrrelda "lugemisväärtust" väärtuste vahemikuga, mitte ühega, sest "lugemisväärtus" võtab sama nupu jaoks palju väärtusi. Näiteks "A" näitab: 849, 850, 851 852, 853, 854, 855, seega on see vahemik 7 väärtust: lävi (852) ja 3 väärtust vasakule ja paremale. siin peame võrdlema "lugemisväärtuse" ja "852" erinevuse absoluutväärtust väärtusega "3".

if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}

6. samm: pärast mõningaid müügitöid

Pärast mõningaid müügitöid
Pärast mõningaid müügitöid
Pärast mõningaid müügitöid
Pärast mõningaid müügitöid
Pärast mõningaid müügitöid
Pärast mõningaid müügitöid

7. samm: tõehetk

Nagu näete, ajab programm mõnikord nuppe segamini, kuid töötab endiselt, pole teoorias vooluahelal viga, kuid kood vajab rohkem kalibreerimist.

8. samm: lõpp

Loodan, et teile meeldib see projekt ja proovite seda teha, võib -olla läheb teil paremini kui mul.

Küsige minult küsimusi, jätke kommentaarid ja ärge unustage minu poolt hääletada, kui see teile meeldib.

Soovitan: