Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-13 06:58
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
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
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
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
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
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.