Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
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
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
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
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
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
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ä.