Isi kandungan:

Pad Kekunci Satu Pin 4 × 4: 10 Langkah
Pad Kekunci Satu Pin 4 × 4: 10 Langkah

Video: Pad Kekunci Satu Pin 4 × 4: 10 Langkah

Video: Pad Kekunci Satu Pin 4 × 4: 10 Langkah
Video: How to use Arduino 4x4 keypad download the code 2024, Disember
Anonim
Pad Kekunci Satu Pin 4 × 4
Pad Kekunci Satu Pin 4 × 4

Setiap kali saya melihat papan kekunci, ia dilengkapi dengan banyak pin, ini adalah pembaziran besar pin Arduino anda, jadi bolehkah kita menjalankan papan kekunci dengan satu dan hanya satu pin? Jawapannya ada di sini.

Langkah 1: Bil Bahan

Bil bahan
Bil bahan

Perkakasan:

01 Arduino UNO

02 Papan Roti

01 LCD dengan I2C

16 Tekan butang

04 perintang 1.5 kΩ

04 perintang 620 Ω

04 perintang 220 Ω

08 perintang 100 Ω

01 perintang 1 kΩ

07 Jumper wayar

Perisian:

Arduino IDE dipasang pada PC anda

Langkah 2: Skematik dan Cicruit

Skematik dan Cicruit
Skematik dan Cicruit
Skematik dan Cicruit
Skematik dan Cicruit

Semua idea adalah bahawa kita mempunyai 4 * 4 matriks butang yang disambungkan secara menegak ke Tanah dengan plumbum kanan dan mendatar oleh plumbum lain (butang utama) dan perintang 1.5 kΩ, 620Ω, 220Ω, dan 100Ω, hujung 4 baris dihubungkan oleh empat perintang 100Ω seperti yang ditunjukkan pada skema.

Setiap kali anda menekan butang, anda menutup litar dan arus melalui jalan yang berbeza dan rantai perintang yang berbeza. Itulah sebabnya pin A0 menerima bacaan analog yang berbeza untuk setiap butang tekan. Semua yang anda perlukan sekarang adalah pengkodan.

Langkah 3: Kodnya

#sertakan

#sertakan

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Butang = A0;

int readvalue;

persediaan tidak sah ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Butang, INPUT);

lcd.backlight ();

lcd.print ("Hello World");

kelewatan (2000);

lcd.clear ();

lcd.print ("Pad kekunci satu pin 4 * 4");

kelewatan (2000); }

gelung kosong ()

{

readvalue = analogRead (Butang);

Serial.println (nilai baca);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Langkah 4: Pembetulan Nilai

Pembetulan Nilai
Pembetulan Nilai

Semasa anda membuka moniter bersiri, ia akan menunjukkan nilai 1023, jika anda menekan butang, ia akan memberi anda bacaan lagi, anda harus mengambil nilai tersebut dan membuat beberapa perubahan dalam kod

Langkah 5: Projek Selepas Kritikan dan Ulasan

Projek Selepas Kritikan dan Kajian
Projek Selepas Kritikan dan Kajian

Tidak syak lagi bahawa kita semua berada di sini untuk belajar dan berkongsi pengetahuan kita, berkat beberapa komen yang ditinggalkan oleh beberapa orang dari komuniti yang sangat membantu, saya memutuskan untuk membuat beberapa penyesuaian dan penambahbaikan pada projek saya:

Perkakasan:

Saya memutuskan untuk menyolder semua komponen dalam PCB untuk mengelakkan masalah sambungan buruk di papan roti.

Kodnya:

Seorang rakan menasihati saya untuk menggunakan perisian membantah dan ini hanyalah gelung ("untuk" gelung misalnya) untuk membuat program mengambil sedikit masa untuk memilih pembacaan itu bermaksud bahawa ia membuat banyak bacaan (500 dalam contoh saya) tetapi memerlukan hanya yang terakhir.

untuk (i = 1; i <= 500; i ++) {// hanya mengambil analog analog ke-500

value = analogRead (Button);} // itu membantu meluangkan masa untuk mengelakkan pembacaan yang buruk

Rakan yang lain terima kasih kepadanya menasihati saya untuk membandingkan "readvalue" dengan pelbagai nilai bukan satu kerana "readvalue" mengambil banyak nilai untuk butang yang sama. "A" misalnya memberikan bacaan: 849, 850, 851 852, 853, 854, 855 jadi julat 7 nilai: ambang (852) dan 3 nilai kiri dan kanan. apa yang harus kita lakukan di sini adalah membandingkan nilai mutlak perbezaan antara "readvalue" dan "852" hingga "3".

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

Langkah 6: Selepas Beberapa Kerja Menjual

Setelah Beberapa Kerja Menjual
Setelah Beberapa Kerja Menjual
Selepas Beberapa Kerja Menjual
Selepas Beberapa Kerja Menjual
Selepas Beberapa Kerja Menjual
Selepas Beberapa Kerja Menjual

Langkah 7: Momen Kebenaran

Seperti yang anda lihat program kadang-kadang membingungkan butang tetapi masih berfungsi, secara teori tidak ada yang salah dengan litar tetapi kodnya memerlukan penentukuran lebih banyak.

Langkah 8: Akhir

Saya harap anda menyukai projek ini dan anda berusaha melakukannya, mungkin anda akan melakukan yang lebih baik daripada yang saya lakukan.

Tanya saya jika anda mempunyai soalan, tinggalkan komen dan, jangan lupa memilih saya jika anda suka.

Disyorkan: