Tartalomjegyzék:

Egy pin 4 × 4 billentyűzet: 10 lépés
Egy pin 4 × 4 billentyűzet: 10 lépés

Videó: Egy pin 4 × 4 billentyűzet: 10 lépés

Videó: Egy pin 4 × 4 billentyűzet: 10 lépés
Videó: Csökkentett mód betöltése Windows 10 alatt (amennyiben nem indul a rendszer) 2024, November
Anonim
Egy tűs 4 × 4 billentyűzet
Egy tűs 4 × 4 billentyűzet

Minden alkalommal, amikor meglátok egy billentyűzetet, sok tűvel érkezik, ez nagy pazarlás az Arduino csapjainál, tehát futtathatunk egy és egyetlen tűvel rendelkező billentyűzetet?. A válasz itt van.

1. lépés: Anyagjegyzék

Darabjegyzékben
Darabjegyzékben

Hardver:

01 Arduino UNO

02 Kenyeretábla

01 LCD I2C -vel

16 Nyomógombok

04 ellenállások 1,5 kΩ

04 ellenállás 620 Ω

04 ellenállás 220 Ω

08 ellenállás 100 Ω

01 ellenállás 1 kΩ

07 Jumper vezetékek

Szoftver:

Arduino IDE telepítve van a számítógépre

2. lépés: Séma és Cicruit

Séma és Cicruit
Séma és Cicruit
Séma és Cicruit
Séma és Cicruit

Az összes elképzelés az, hogy van 4*4 mátrix nyomógombunk, amelyek függőlegesen kapcsolódnak a földhöz a megfelelő vezetékkel, vízszintesen pedig a másik vezetékkel (a gombvezetékkel) és az 1,5 kΩ, 620Ω, 220Ω és 100Ω ellenállásokkal. a 4 sort négy, 100Ω -os ellenállás köti össze, az ábra szerint.

Minden alkalommal, amikor megnyom egy gombot, bezárja az áramkört, és az áram más útvonalon és különböző ellenállásláncokon megy keresztül, ezért az A0 érintkező minden nyomógombhoz más analóg értéket kap. Most már csak kódolásra van szüksége.

3. lépés: A kód

#befoglalni

#befoglalni

LiquidCrystal_I2C LCD (0x3f, 20, 4);

int Gomb = A0;

int readvalue;

üres beállítás ()

{

Sorozat.kezdet (9600);

lcd.begin ();

pinMode (gomb, INPUT);

lcd.backlight ();

lcd.print ("Hello World");

késleltetés (2000);

lcd.clear ();

lcd.print ("Egy pin 4*4 billentyűzet");

késleltetés (2000); }

üres hurok ()

{

readvalue = analógRead (gomb);

Serial.println (olvasási érték);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. lépés: Értékek korrekciója

Értékek korrekciója
Értékek korrekciója

Amikor megnyitja a soros monitort, az 1023 értéket mutat, ha megnyom egy gombot, akkor újabb leolvasást ad, és meg kell adnia ezeket az értékeket, és módosítania kell a kódot

5. lépés: Projekt a kritika és felülvizsgálat után

Projekt a kritika és felülvizsgálat után
Projekt a kritika és felülvizsgálat után

Kétségtelen, hogy mindannyian azért vagyunk itt, hogy tanuljunk és megoszthassuk tudásunkat. A közösség néhány tagja által tett, nagyon hasznos megjegyzéseknek köszönhetően úgy döntöttem, hogy módosítok és javítok a projektemen:

A hardver:

Úgy döntöttem, hogy forrasztom az összes komponenst egy NYÁK -ba, hogy elkerüljem a rossz kapcsolatot a kenyértáblákban.

A kód:

Egy barátom azt tanácsolta, hogy használjak szoftveres visszalépést, és ez csak egy ciklus (például "for" ciklus), hogy a program eltartson egy kis idővel az olvasás kiválasztásához, ez azt jelenti, hogy sok olvasást végez (500 a vizsgámban) csak az utolsó.

mert (i = 1; i <= 500; i ++) {// csak az 500. analóg olvasatot vegye fel

value = analogRead (Button);} // ez segít eltartani egy ideig, és elkerülni a rossz leolvasásokat

Egy másik barátja hála neki azt tanácsolta, hogy hasonlítsam össze a "readvalue" értéket egy sor értékkel, mert a "readvalue" sok értéket vesz igénybe ugyanazon nyomógombhoz. Az "A" például a következő értékeket adja: 849, 850, 851 852, 853, 854, 855, tehát 7 értéktartomány: küszöbérték (852) és 3 érték balra és jobbra. Itt csak a "readvalue" és a "852" közötti különbség abszolút értékét kell összehasonlítanunk a "3" értékkel.

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

6. lépés: Néhány eladási munka után

Némi eladási munka után
Némi eladási munka után
Némi eladási munka után
Némi eladási munka után
Némi eladási munka után
Némi eladási munka után

7. lépés: Az igazság pillanata

Amint láthatja, a program néha megzavarja a gombokat, de még mindig működik, elméletileg nincs semmi baj az áramkörrel, de a kódnak több kalibrálásra van szüksége.

8. lépés: A vége

Remélem tetszeni fog ez a projekt, és megpróbáljátok megvalósítani, lehet, hogy jobban fogjátok csinálni, mint én.

Kérdezzen tőlem, ha kérdése van, hagyjon megjegyzést, és ne felejtse el szavazni rám, ha tetszik.

Ajánlott: