Mündəricat:

Bir pin 4 × 4 klaviatura: 10 addım
Bir pin 4 × 4 klaviatura: 10 addım

Video: Bir pin 4 × 4 klaviatura: 10 addım

Video: Bir pin 4 × 4 klaviatura: 10 addım
Video: 10-ть самоделок для мастерской простыми инструментами. 2024, Dekabr
Anonim
Bir pin 4 × 4 klaviatura
Bir pin 4 × 4 klaviatura

Hər dəfə bir klaviatura gördüyümdə bir çox sancaqla gəlir, bu sizin Arduino sancaqlarınızın böyük bir tullantıdır, buna görə də tək bir pinlə klaviatura işlədə bilərikmi? Cavab burada.

Addım 1: Materiallar Bill

Materiallar Bill
Materiallar Bill

Avadanlıq:

01 Arduino UNO

02 Çörək lövhələri

I2C ilə 01 LCD

16 Düymələri basın

04 rezistor 1.5 kΩ

04 rezistor 620 Ω

04 resist müqavimət 220 Ω

08 rezistor 100 Ω

01 müqavimət 1 kΩ

07 Jumper telləri

Proqram təminatı:

Arduino IDE kompüterinizə quraşdırılmışdır

Addım 2: Şematik və Cicruit

Şematik və Cicruit
Şematik və Cicruit
Şematik və Cicruit
Şematik və Cicruit

Bütün fikir budur ki, şaquli şəkildə yerə doğru, digər ucuna (düymə ucu) və 1.5 kΩ, 620Ω, 220Ω və 100Ω rezistorlara, şaquli olaraq Yerə şaquli olaraq bağlanmış 4*4 matris düymələrimiz var. 4 sıra, sxematik şəkildə göstərildiyi kimi dörd 100Ω rezistorla bağlanır.

Hər dəfə bir düyməni basdığınız zaman dövrəni bağlayırsınız və cərəyan fərqli bir yoldan və fərqli rezistorlar zəncirindən keçir, buna görə A0 pin hər düymə üçün fərqli bir oxunuş alır. İndi ehtiyacınız olan hər şey kodlaşdırmaqdır.

Addım 3: Kod

#daxil edin

#daxil edin

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Düymə = A0;

int readvalue;

boş quraşdırma ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Düymə, GİRİŞ);

lcd.lightlight ();

lcd.print ("Salam Dünya");

gecikmə (2000);

lcd.clear ();

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

gecikmə (2000); }

boşluq döngəsi ()

{

readvalue = analogRead (Düymə);

Serial.println (oxu dəyəri);

əgər (oxu dəyəri == 852) {lcd.clear (); lcd.print ("A");}

başqa {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

başqa {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

başqa {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

başqa {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

başqa {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

başqa {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

başqa {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

başqa {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

başqa {əgər (oxu dəyəri == 349) {lcd.clear (); lcd.print ("5");}

başqa {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

başqa {əgər (oxu dəyəri == 279) {lcd.clear (); lcd.print ("0");}

başqa {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

başqa {əgər (oxu dəyəri == 271) {lcd.clear (); lcd.print ("4");}

başqa {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

başqa {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}

Addım 4: Dəyərlərin Düzəldilməsi

Dəyərlərin düzəldilməsi
Dəyərlərin düzəldilməsi

Seriya monitörünü açdığınızda 1023 dəyərini göstərəcək, bir düyməyə basarsanız başqa bir oxu verər, bu dəyərləri götürüb kodda bəzi dəyişikliklər etməlisiniz.

Addım 5: Tənqiddən və Layihədən Sonra Layihə

Tənqid və Baxışdan Sonra Layihə
Tənqid və Baxışdan Sonra Layihə

Hamımızın biliklərimizi öyrənmək və bölüşmək üçün gəldiyimizə şübhə yoxdur, cəmiyyətdən bəzi insanların çox faydalı olan şərhləri sayəsində layihəmdə bəzi düzəlişlər və təkmilləşdirmələr etmək qərarına gəldim:

Avadanlıq:

Çörək lövhələrində pis əlaqə probleminin qarşısını almaq üçün bütün komponentləri bir PCB -də lehimləmək qərarına gəldim.

Kod:

Bir dostum mənə bir proqramın ləğv edilməsindən istifadə etməyi məsləhət gördü və bu proqramın oxunması üçün bir az vaxt tələb etməsi üçün bir döngə (məsələn, "for" döngəsi) deməkdir ki, çox oxunur (mənim imtahanımda 500), amma yalnız sonuncu.

for (i = 1; i <= 500; i ++) {// yalnız 500 -cü analoqu götür

dəyər = analogRead (Düymə);} // bu, pis oxunmaların qarşısını almaq üçün bir az vaxt almağa kömək edir

Onun sayəsində başqa bir dost mənə "oxu dəyəri" ni bir deyil, bir sıra dəyərlərlə müqayisə etməyi məsləhət gördü, çünki "oxumaq dəyəri" eyni düyməni basmaq üçün bir çox dəyər alır. Məsələn "A" oxunuşunu verir: 849, 850, 851 852, 853, 854, 855, buna görə də 7 dəyər aralığına malikdir: bir eşik (852) və 3 dəyər sola və sağa. burada etməli olduğumuz şey, "oxu dəyəri" ilə "852" arasındakı fərqin mütləq dəyərini "3" ilə müqayisə etməkdir.

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

Addım 6: Biraz Satış İşindən Sonra

Biraz Satış İşindən Sonra
Biraz Satış İşindən Sonra
Biraz Satış İşindən Sonra
Biraz Satış İşindən Sonra
Biraz Satış İşindən Sonra
Biraz Satış İşindən Sonra

Addım 7: Həqiqət anı

Gördüyünüz kimi, proqram bəzən düymələri qarışdırır, amma yenə də işləyir, nəzəri olaraq dövrədə heç bir səhv yoxdur, amma kodun daha çox kalibrlənməsi lazımdır.

Addım 8: Son

Ümid edirəm ki, bu layihəni bəyənirsiniz və bunu etməyə çalışırsınız, bəlkə də məndən daha yaxşı edəcəksiniz.

Suallarınız varsa məndən soruşun, şərhlər yazın və istəsəniz mənə səs verməyi unutmayın.

Tövsiyə: