Mundarija:

Bir pinli 4 × 4 klaviatura: 10 qadam
Bir pinli 4 × 4 klaviatura: 10 qadam

Video: Bir pinli 4 × 4 klaviatura: 10 qadam

Video: Bir pinli 4 × 4 klaviatura: 10 qadam
Video: Xotirani kuchaytiruvchi 10 ta SIR. Hamma uchun birdek to'gri keladi! 10 daqiqada 2024, Noyabr
Anonim
Bir pinli 4 × 4 klaviatura
Bir pinli 4 × 4 klaviatura

Har safar men klaviaturani ko'rsam, u juda ko'p pinlar bilan birga keladi, bu sizning Arduino pinlaringizning katta isrofgarchiligi, shuning uchun biz bitta va bitta pinli klaviaturani ishga tushira olamizmi? Javob shu erda.

1 -qadam: materiallar ro'yxati

Materiallar hisobi
Materiallar hisobi

Uskuna:

01 Arduino UNO

02 Pechkalar paneli

I2C bilan 01 LCD

16 tugmachalarni bosing

04 rezistorlar 1,5 kΩ

04 qarshilik 620 Ω

04 qarshilik 220 Ω

08 qarshilik 100 Ω

01 qarshilik 1 kΩ

07 o'tish simlari

Dasturiy ta'minot:

Kompyuteringizga Arduino IDE o'rnatilgan

2 -qadam: sxematik va tsikrut

Sxematik va tsikrut
Sxematik va tsikrut
Sxematik va tsikrut
Sxematik va tsikrut

Hamma g'oya shundaki, bizda 4*4 matritsali tugmalar yerga vertikal ravishda o'ng simi bilan, gorizontal ravishda boshqa simi (tugma chizig'i) va 1,5 kΩ, 620Ω, 220Ω va 100Ω rezistorlar bilan bog'langan. 4 qator sxemada ko'rsatilganidek, 100 Ω to'rtta qarshilik bilan bog'langan.

Har safar siz tugmachani bosganingizda, siz kontaktlarning zanglashiga olib keladi va oqim boshqa yo'l va turli rezistorlar zanjiridan o'tadi, shuning uchun A0 pimi har bir tugma uchun har xil analog o'qishni oladi. Sizga kerak bo'lgan hamma narsa kodlash.

3 -qadam: Kod

#qo'shing

#qo'shing

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int tugmasi = A0;

int readvalue;

bo'sh o'rnatish ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (tugma, kirish);

lcd.backlight ();

lcd.print ("Salom dunyo");

kechikish (2000);

lcd.clear ();

lcd.print ("bitta pin 4*4 klaviatura");

kechikish (2000); }

bo'sh halqa ()

{

readvalue = analogRead (Tugma);

Serial.println (o'qish qiymati);

agar (o'qish qiymati == 852) {lcd.clear (); lcd.print ("A");}

boshqa {agar (o'qish qiymati == 763) {lcd.clear (); lcd.print ("B");}

boshqa {agar (o'qish qiymati == 685) {lcd.clear (); lcd.print ("C");}

boshqa {agar (o'qish qiymati == 965) {lcd.clear (); lcd.print ("D");}

boshqa {agar (o'qish qiymati == 565) {lcd.clear (); lcd.print ("9");}

boshqa {agar (o'qish qiymati == 614) {lcd.clear (); lcd.print ("6");}

boshqa {agar (o'qish qiymati == 360) {lcd.clear (); lcd.print ("3");}

boshqa {agar (o'qish qiymati == 335) {lcd.clear (); lcd.print ("#");}

boshqa {agar (o'qish qiymati == 396) {lcd.clear (); lcd.print ("8");}

boshqa {agar (o'qish qiymati == 349) {lcd.clear (); lcd.print ("5");}

boshqa {agar (o'qish qiymati == 235) {lcd.clear (); lcd.print ("2");}

boshqa {agar (o'qish qiymati == 279) {lcd.clear (); lcd.print ("0");}

boshqa {agar (o'qish qiymati == 452) {lcd.clear (); lcd.print ("7");}

boshqa {agar (o'qish qiymati == 271) {lcd.clear (); lcd.print ("4");}

boshqa {agar (o'qish qiymati == 170) {lcd.clear (); lcd.print ("1");}

boshqa {if (o'qish qiymati == 92) {lcd.clear (); lcd.print ("*");} boshqa {}}}}}}}}}}}}}}}}

4 -qadam: qadriyatlarni tuzatish

Qadriyatlarni tuzatish
Qadriyatlarni tuzatish

Agar ketma -ket monitorni ochsangiz, u 1023 qiymatini ko'rsatadi, agar siz tugmani bosgan bo'lsangiz, u sizga boshqa o'qishni beradi, siz bu qiymatlarni olishingiz va kodga ba'zi o'zgartirishlar kiritishingiz kerak.

5 -qadam: Tanqid va ko'rib chiqishdan keyingi loyiha

Tanqid va ko'rib chiqishdan keyin loyiha
Tanqid va ko'rib chiqishdan keyin loyiha

Shubha yo'qki, biz hammamiz bu erda o'z bilimimizni o'rganish va bo'lishish uchun keldik, hamjamiyatdan juda foydali bo'lgan ba'zi sharhlar tufayli men o'z loyihamga ba'zi o'zgartirishlar kiritishga qaror qildim:

Uskuna:

Non panelidagi noto'g'ri ulanish muammosini oldini olish uchun men barcha komponentlarni tenglikni kartasiga lehimlashga qaror qildim.

Kod:

Do'stim menga dasturiy ta'minotni o'chirish dasturidan foydalanishni maslahat berdi va bu dasturni o'qishga vaqt ajratish uchun faqat pastadir (masalan, "for" uchun), bu ko'p o'qish (mening imtihonimda 500 ta) deganidir, lekin faqat oxirgi.

for (i = 1; i <= 500; i ++) {// faqat 500 -chi analog o'qishni oling

value = analogRead (Button);} // bu yomon o'qishdan qochish uchun vaqt ajratishga yordam beradi

Uning yordami bilan boshqa do'stim "o'qish qiymati" ni bir emas, balki bir qator qiymatlar bilan solishtirishni maslahat berdi, chunki "o'qish qiymati" bir xil tugmani bosish uchun juda ko'p qiymatlarni oladi. Masalan, "A" o'qishni beradi: 849, 850, 851 852, 853, 854, 855, shuning uchun bu 7 qiymat oralig'i: pol (852) va 3 qiymat chap va o'ng. Bu erda nima qilishimiz kerak, "o'qish qiymati" va "852" o'rtasidagi farqning mutlaq qiymatini "3" ga solishtirish.

agar (abs (o'qish qiymati-852) <= 8) {lcd.clear (); lcd.print ("A");}

6 -qadam: sotishdan keyin

Ba'zi sotish ishlaridan keyin
Ba'zi sotish ishlaridan keyin
Ba'zi sotish ishlaridan keyin
Ba'zi sotish ishlaridan keyin
Ba'zi sotish ishlaridan keyin
Ba'zi sotish ishlaridan keyin

7 -qadam: Haqiqat lahzasi

Ko'rib turganingizdek, dastur ba'zida tugmachalarni chalkashtirib yuboradi, lekin u hali ham ishlaydi, nazariy jihatdan bu sxemada hech qanday xato yo'q, lekin kod ko'proq kalibrlashni talab qiladi.

8 -qadam: Oxir

Umid qilamanki, sizga bu loyiha yoqdi va siz buni qilishga harakat qilyapsiz, ehtimol siz mendan yaxshiroq ish qilasiz.

Savollaringiz bo'lsa, mendan so'rang, izoh qoldiring va agar sizga yoqsa, menga ovoz berishni unutmang.

Tavsiya: