Talaan ng mga Nilalaman:

Isang Pin 4 × 4 Keypad: 10 Hakbang
Isang Pin 4 × 4 Keypad: 10 Hakbang

Video: Isang Pin 4 × 4 Keypad: 10 Hakbang

Video: Isang Pin 4 × 4 Keypad: 10 Hakbang
Video: Ремонт батареи ноутбука (замена аккумуляторов) 2024, Nobyembre
Anonim
Isang Pin 4 × 4 Keypad
Isang Pin 4 × 4 Keypad

Sa tuwing makakakita ako ng isang keypad, may kasamang maraming mga pin, isang malaking pag-aaksaya ng iyong mga pin ng Arduino, kaya maaari ba nating patakbuhin ang isang keypad na may isa at isang pin lamang?. Ang sagot ay narito.

Hakbang 1: Bill ng Mga Materyales

Bill ng Mga Materyales
Bill ng Mga Materyales

Hardware:

01 Arduino UNO

02 Mga Breadboard

01 LCD na may I2C

16 Mga pindutan ng push

04 resistors 1.5 kΩ

04 resistors 620 Ω

04 resistors 220 Ω

08 resistors 100 Ω

01 risistor 1 kΩ

07 Mga Jumper wires

Software:

Naka-install ang Arduino IDE sa iyong PC

Hakbang 2: Schematic at Cicruit

Schematic at Cicruit
Schematic at Cicruit
Schematic at Cicruit
Schematic at Cicruit

Ang lahat ng ideya ay mayroon kaming 4 * 4 matrix ng mga push button na konektado patayo sa Ground ng tamang lead at pahalang ng iba pang lead (ang lead ng pindutan) at resistors ng 1.5 kΩ, 620Ω, 220Ω, at 100Ω, ang mga dulo ng ang 4 na mga hilera ay konektado sa pamamagitan ng apat na 100Ω resistors tulad ng ipinakita sa eskematiko.

Sa tuwing pipilitin mo ang isang pindutan isinasara mo ang circuit at ang kasalukuyang dumadaan sa isang iba't ibang mga landas at iba't ibang mga kadena ng resistors na ang dahilan kung bakit tatanggapin ng pin A0 ang isang iba't ibang mga analog na basahin para sa bawat pindutan ng push. Ang kailangan mo lang ngayon ay ang pag-coding.

Hakbang 3: Ang Code

# isama

# isama

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Button = A0;

int readvalue;

walang bisa ang pag-setup ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Button, INPUT);

lcd.backlight ();

lcd.print ("Hello World");

pagkaantala (2000);

lcd.clear ();

lcd.print ("Isang pin 4 * 4 keypad");

pagkaantala (2000); }

walang bisa loop ()

{

readvalue = analogRead (Button);

Serial.println (readvalue);

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

iba pa {kung (readvalue == 763) {lcd.clear (); lcd.print ("B");}

iba pa {kung (readvalue == 685) {lcd.clear (); lcd.print ("C");}

iba pa {kung (readvalue == 965) {lcd.clear (); lcd.print ("D");}

iba pa {kung (readvalue == 565) {lcd.clear (); lcd.print ("9");}

iba pa {kung (readvalue == 614) {lcd.clear (); lcd.print ("6");}

iba pa {kung (readvalue == 360) {lcd.clear (); lcd.print ("3");}

iba pa {kung (readvalue == 335) {lcd.clear (); lcd.print ("#");}

iba pa {kung (readvalue == 396) {lcd.clear (); lcd.print ("8");}

iba pa {kung (readvalue == 349) {lcd.clear (); lcd.print ("5");}

iba pa {kung (readvalue == 235) {lcd.clear (); lcd.print ("2");}

iba pa {kung (readvalue == 279) {lcd.clear (); lcd.print ("0");}

iba pa {kung (readvalue == 452) {lcd.clear (); lcd.print ("7");}

iba pa {kung (readvalue == 271) {lcd.clear (); lcd.print ("4");}

iba pa {kung (readvalue == 170) {lcd.clear (); lcd.print ("1");}

iba pa {kung (readvalue == 92) {lcd.clear (); lcd.print ("*");} iba pa {}}}}}}}}}}}}}}}}}

Hakbang 4: Pagwawasto ng Mga Halaga

Pagwawasto ng Mga Halaga
Pagwawasto ng Mga Halaga

Kapag binuksan mo ang serial moniter magpapakita ito ng halagang 1023, kung pipilitin mo ang isang pindutan bibigyan ka nito ng isa pang pagbabasa kailangan mong kunin ang mga halagang iyon at gumawa ng ilang mga pagbabago sa code

Hakbang 5: Proyekto Matapos ang Kritika at Repasuhin

Proyekto Matapos ang Kritika at Balik-Aral
Proyekto Matapos ang Kritika at Balik-Aral

Walang duda na lahat tayo ay narito upang malaman at ibahagi ang aming kaalaman, salamat sa ilang mga puna na naiwan ng ilang mga tao mula sa komunidad na lubos na nakatulong, nagpasya akong gumawa ng ilang mga pagsasaayos at pagpapabuti sa aking proyekto:

Ang hardware:

Napagpasyahan kong maghinang ng lahat ng mga bahagi sa isang PCB upang maiwasan ang problema ng hindi magandang koneksyon sa mga breadboard.

Ang code:

Pinayuhan ako ng isang kaibigan na gumamit ng isang software debouncing at ito ay isang loop ("para sa" loop halimbawa) upang gumawa ng kaunting oras ang programa upang pumili ng isang basahin nangangahulugan ito na gumagawa ito ng maraming mga nagbabasa (500 sa aking pagsusulit) ngunit tumatagal ang huli lang.

para sa (i = 1; i <= 500; i ++) {// kunin lamang ang ika-500 na analogread

halaga = analogRead (Button);} // makakatulong iyon upang tumagal ng kaunting oras upang maiwasan ang masamang pagbabasa

Pinayuhan ako ng ibang kaibigan dahil sa kanya na ihambing ang "readvalue" sa isang hanay ng mga halagang hindi isa dahil ang "readvalue" ay tumatagal ng maraming mga halaga para sa parehong pindutan ng push. Halimbawa, ang "A" ay binabasa ng: 849, 850, 851 852, 853, 854, 855 kaya't ito ay isang saklaw ng 7 mga halaga: isang threshold (852) at 3 mga halagang kaliwa at kanan. ang dapat nating gawin dito ay ihambing ang ganap na halaga ng pagkakaiba sa pagitan ng "readvalue" at "852" sa "3".

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

Hakbang 6: Pagkatapos ng Ilang Trabaho sa Pag-Soldring

Pagkatapos ng Ilang Trabaho sa Pag-soldring
Pagkatapos ng Ilang Trabaho sa Pag-soldring
Pagkatapos ng Ilang Trabaho sa Pag-soldring
Pagkatapos ng Ilang Trabaho sa Pag-soldring
Pagkatapos ng Ilang Trabaho sa Pag-soldring
Pagkatapos ng Ilang Trabaho sa Pag-soldring

Hakbang 7: Ang Sandali ng Katotohanan

Tulad ng nakikita mo ang programa kung minsan ay nakalilito ang mga pindutan ngunit gumagana pa rin ito, sa teorya ay walang mali sa circuit ngunit ang code ay nangangailangan ng higit na pagkakalibrate.

Hakbang 8: Ang Wakas

Inaasahan kong gusto mo ang proyektong ito at subukan mong gawin ito, maaaring mas mahusay ka kaysa sa ginawa ko.

Tanungin ako kung mayroon kang mga katanungan, mag-iwan ng mga komento at, huwag kalimutang bumoto para sa akin kung gusto mo iyon.

Inirerekumendang: