Daftar Isi:

Satu Pin 4 × 4 Keypad: 10 Langkah
Satu Pin 4 × 4 Keypad: 10 Langkah

Video: Satu Pin 4 × 4 Keypad: 10 Langkah

Video: Satu Pin 4 × 4 Keypad: 10 Langkah
Video: USE ONLY 1 PIN TO READ 4 BUTTONS (KC11B04 4X1 AD KEYPAD) - Arduino tutorial #29 2024, November
Anonim
Satu Pin 4 × 4 Keypad
Satu Pin 4 × 4 Keypad

Setiap kali saya melihat keypad, itu datang dengan banyak pin, itu membuang-buang pin Arduino Anda, jadi bisakah kita menjalankan keypad dengan satu dan hanya satu pin?. Jawabannya ada di sini.

Langkah 1: Daftar Bahan

Bill of material
Bill of material

Perangkat keras:

01 Arduino UNO

02 Papan tempat memotong roti

01 LCD dengan I2C

16 Tombol tekan

04 resistor 1,5 kΩ

04 resistor 620

04 resistor 220

08 resistor 100

01 resistor 1 kΩ

07 Kabel jumper

Perangkat lunak:

Arduino IDE diinstal pada PC Anda

Langkah 2: Skema dan Cicruit

Skema dan Sirkuit
Skema dan Sirkuit
Skema dan Sirkuit
Skema dan Sirkuit

Idenya adalah bahwa kita memiliki matriks tombol tekan 4*4 yang terhubung secara vertikal ke Ground oleh kabel kanan dan horizontal dengan kabel lainnya (kabel tombol) dan resistor 1,5 kΩ, 620Ω, 220Ω, dan 100Ω, ujung-ujungnya 4 baris dihubungkan oleh empat resistor 100Ω seperti yang ditunjukkan pada skema.

Setiap kali Anda menekan tombol, Anda menutup sirkuit dan arus melewati jalur yang berbeda dan rantai resistor yang berbeda itu sebabnya pin A0 menerima pembacaan analog yang berbeda untuk setiap tombol. Yang Anda butuhkan sekarang hanyalah coding.

Langkah 3: Kode

#termasuk

#termasuk

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Tombol = A0;

int nilai baca;

batalkan pengaturan()

{

Serial.begin(9600);

lcd.mulai();

pinMode(Tombol, INPUT);

lcd.lampu latar();

lcd.print("Halo Dunia");

penundaan(2000);

lcd.clear();

lcd.print("Keypad 4*4 satu pin");

penundaan(2000); }

lingkaran kosong()

{

readvalue = analogRead(Tombol);

Serial.println(nilai baca);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

lain{ if (nilai baca==92){lcd.clear();lcd.print("*");}else{}}}}}}}}}}}}}}} }

Langkah 4: Koreksi Nilai

Koreksi Nilai
Koreksi Nilai

Ketika Anda membuka serial moniter itu akan menunjukkan nilai 1023, jika Anda menekan tombol itu akan memberi Anda bacaan lain, Anda harus mengambil nilai-nilai itu dan membuat beberapa perubahan dalam kode

Langkah 5: Proyek Setelah Kritik dan Review

Proyek Setelah Kritik dan Review
Proyek Setelah Kritik dan Review

Tidak ada keraguan bahwa kita semua di sini untuk belajar dan berbagi pengetahuan kita, berkat beberapa komentar yang ditinggalkan oleh beberapa orang dari komunitas yang sangat membantu, saya memutuskan untuk membuat beberapa penyesuaian dan perbaikan pada proyek saya:

Perangkat keras:

Saya memutuskan untuk menyolder semua komponen dalam PCB untuk menghindari masalah koneksi yang buruk di papan tempat memotong roti.

Kode:

Seorang teman menyarankan saya untuk menggunakan perangkat lunak debouncing dan itu hanya sebuah loop ("untuk" loop misalnya) untuk membuat program mengambil beberapa waktu untuk memilih membaca itu berarti membuat banyak membaca (500 dalam contoh saya) tetapi mengambil hanya yang terakhir.

for (i=1; i<= 500; i++) { // ambil hanya pembacaan analog ke-500

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

Seorang teman lain yang berterima kasih kepadanya menyarankan saya untuk membandingkan "nilai baca" dengan rentang nilai bukan satu karena "nilai baca" membutuhkan banyak nilai untuk tombol tekan yang sama. "A" misalnya memberikan pembacaan: 849, 850, 851 852, 853, 854, 855 jadi ini adalah rentang 7 nilai: ambang batas (852) dan 3 nilai kiri dan kanan. yang harus kita lakukan di sini adalah membandingkan nilai absolut dari perbedaan antara "nilai baca" dan "852" dengan "3".

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

Langkah 6: Setelah Beberapa Pekerjaan Solder

Setelah Beberapa Pekerjaan Penyolderan
Setelah Beberapa Pekerjaan Penyolderan
Setelah Beberapa Pekerjaan Penyolderan
Setelah Beberapa Pekerjaan Penyolderan
Setelah Beberapa Pekerjaan Penyolderan
Setelah Beberapa Pekerjaan Penyolderan

Langkah 7: Momen Kebenaran

Seperti yang Anda lihat, program terkadang membingungkan tombol tetapi masih berfungsi, secara teori tidak ada yang salah dengan rangkaian tetapi kodenya membutuhkan lebih banyak kalibrasi.

Langkah 8: Akhir

Saya harap Anda menyukai proyek ini dan Anda mencoba melakukannya, mungkin Anda akan melakukan lebih baik daripada saya.

Tanya saya jika Anda memiliki pertanyaan, tinggalkan komentar dan, jangan lupa untuk memilih saya jika Anda menyukainya.

Direkomendasikan: