Sisällysluettelo:

Yksi nastainen 4 × 4 -näppäimistö: 10 vaihetta
Yksi nastainen 4 × 4 -näppäimistö: 10 vaihetta

Video: Yksi nastainen 4 × 4 -näppäimistö: 10 vaihetta

Video: Yksi nastainen 4 × 4 -näppäimistö: 10 vaihetta
Video: ⚠️ Дерзкий антирейтинг: топ-10 НЕнадёжных бензиновых моторов по мнению "АвтоСтронг-М" 2024, Heinäkuu
Anonim
Yksi nastainen 4 × 4 -näppäimistö
Yksi nastainen 4 × 4 -näppäimistö

Aina kun näen näppäimistön, siinä on paljon nastoja, se on suuri Arduino -nastojen tuhlausta, joten voimmeko käyttää näppäimistöä yhdellä ja yhdellä tapilla? Vastaus on täällä.

Vaihe 1: Materiaaliluettelo

Materiaaliluettelo
Materiaaliluettelo

Laitteisto:

01 Arduino UNO

02 Leipälaudat

01 LCD ja I2C

16 Painikkeet

04 vastukset 1,5 kΩ

04 vastukset 620 Ω

04 vastukset 220 Ω

08 vastukset 100 Ω

01 vastus 1 kΩ

07 Hyppyjohdot

Ohjelmisto:

Arduino IDE on asennettu tietokoneellesi

Vaihe 2: Kaavio ja Cicruit

Kaavio ja Cicruit
Kaavio ja Cicruit
Kaavio ja Cicruit
Kaavio ja Cicruit

Ajatus on, että meillä on 4*4 matriisi painikkeita, jotka on kytketty pystysuoraan maahan oikealla johdolla ja vaakasuoraan toisella johdolla (painikejohto) ja vastukset 1,5 kΩ, 620Ω, 220Ω ja 100Ω. 4 riviä on kytketty neljällä 100Ω: n vastuksella kaavion mukaisesti.

Joka kerta, kun painat painiketta, suljet piirin ja virta kulkee eri reitin ja eri vastuksen ketjun läpi, siksi nasta A0 saa eri analogisen lukeman jokaiselle painikkeelle. Kaikki mitä nyt tarvitset, on koodaus.

Vaihe 3: Koodi

#sisältää

#sisältää

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int -painike = A0;

int lukuarvo;

mitätön asennus ()

{

Sarja.alku (9600);

lcd.begin ();

pinMode (painike, INPUT);

lcd.taustavalo ();

lcd.print ("Hello World");

viive (2000);

lcd.clear ();

lcd.print ("One pin 4*4 -näppäimistö");

viive (2000); }

tyhjä silmukka ()

{

lukuarvo = analoginenLue (painike);

Serial.println (lukuarvo);

if (lukuarvo == 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 {}}}}}}}}}}}}}}}}}}

Vaihe 4: Arvojen korjaus

Arvojen korjaus
Arvojen korjaus

Kun avaat sarjamittarin, se näyttää arvon 1023, jos painat painiketta, se antaa sinulle uuden lukeman, sinun on otettava nämä arvot ja tehtävä joitain muutoksia koodiin

Vaihe 5: Projekti arvostelun ja arvioinnin jälkeen

Projekti arvostelun ja arvioinnin jälkeen
Projekti arvostelun ja arvioinnin jälkeen

Ei ole epäilystäkään siitä, että olemme kaikki täällä oppimassa ja jakamassa tietämystämme. Joidenkin yhteisön ihmisten erittäin hyödyllisten kommenttien ansiosta päätin tehdä joitain muutoksia ja parannuksia projektiini:

Laitteisto:

Päätin juottaa kaikki piirilevyn komponentit välttääkseen ongelman leipälevyjen huonosta liitännästä.

Koodi:

Ystäväni neuvoi minua käyttämään ohjelmiston purkamista, ja se on vain silmukka (esimerkiksi "for" -silmukka), jotta ohjelman lukeminen kestää jonkin aikaa. vain viimeinen.

(i = 1; i <= 500; i ++) {// ota vain 500. analoginen luku

value = analogRead (Button);} // se auttaa jonkin aikaa ja välttää huonot lukemat

Toinen hänen ystävänsä kehotti minua vertaamaan "lukuarvoa" arvoalueeseen, joka ei ole yksi, koska "lukuarvo" vie paljon arvoja samalle painikkeelle. Esimerkiksi "A" antaa lukeman: 849, 850, 851 852, 853, 854, 855, joten se on 7 arvon alue: kynnys (852) ja 3 arvoa vasemmalle ja oikealle. Tässä meidän on verrattava "lukuarvon" ja "852": n eron absoluuttista arvoa arvoon "3".

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

Vaihe 6: Myynnin jälkeen

Myynnin jälkeen
Myynnin jälkeen
Myynnin jälkeen
Myynnin jälkeen
Myynnin jälkeen
Myynnin jälkeen

Vaihe 7: Totuuden hetki

Kuten näet, ohjelma joskus sekoittaa painikkeet, mutta se toimii edelleen, teoriassa ei ole mitään vikaa piirissä, mutta koodi tarvitsee enemmän kalibrointia.

Vaihe 8: Loppu

Toivottavasti pidät tästä projektista ja yrität tehdä sen, ehkä onnistut paremmin kuin minä.

Kysy minulta, jos sinulla on kysyttävää, jätä kommentteja ja älä unohda äänestää minua, jos pidät siitä.

Suositeltava: