Kazalo:

Tipkovnica z enim zatičem 4 × 4: 10 korakov
Tipkovnica z enim zatičem 4 × 4: 10 korakov

Video: Tipkovnica z enim zatičem 4 × 4: 10 korakov

Video: Tipkovnica z enim zatičem 4 × 4: 10 korakov
Video: Chopin - Prelude in E Minor (Op. 28 No. 4) 2024, November
Anonim
Tipkovnica z enim pin 4 × 4
Tipkovnica z enim pin 4 × 4

Vsakič, ko vidim tipkovnico, ima veliko zatičev, to je velika izguba vaših zatičev Arduino, zato lahko zaženemo tipkovnico z enim in samo enim zatičem?. Odgovor je tukaj.

1. korak: Predmet materiala

Račun za materiale
Račun za materiale

Strojna oprema:

01 Arduino UNO

02 Deske

01 LCD z I2C

16 Potisni gumbi

04 upori 1,5 kΩ

04 upori 620 Ω

04 upori 220 Ω

08 upori 100 Ω

01 upor 1 kΩ

07 Mostične žice

Programska oprema:

Arduino IDE nameščen na vašem računalniku

2. korak: Shema in Cicruit

Shema in Cicruit
Shema in Cicruit
Shema in Cicruit
Shema in Cicruit

Zamisel je v tem, da imamo matriko 4*4 tipk, ki so navpično na ozemljitev povezane z desnim vodilom, vodoravno pa z drugim vodilom (vodilom gumba) in upori 1,5 kΩ, 620Ω, 220Ω in 100Ω, konci 4 vrstice so povezane s štirimi 100Ω upori, kot je prikazano na shemi.

Vsakič, ko pritisnete gumb, zaprete vezje in tok gre skozi drugo pot in različno verigo uporov, zato pin A0 prejme drugačno analogno branje za vsak gumb. Vse, kar potrebujete, je kodiranje.

3. korak: Koda

#vključi

#vključi

LiquidCrystal_I2C lcd (0x3f, 20, 4);

gumb int = A0;

int readvalue;

void setup ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (gumb, VHOD);

lcd.backlight ();

lcd.print ("Pozdravljeni svet");

zamuda (2000);

lcd.clear ();

lcd.print ("Ena pin 4*4 tipkovnica");

zamuda (2000); }

void loop ()

{

readvalue = analogRead (gumb);

Serial.println (readvalue);

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. korak: Popravek vrednosti

Popravek vrednosti
Popravek vrednosti

Ko odprete serijski nadzornik, bo prikazan vrednost 1023, če pritisnete gumb, se vam bo znova odčitalo, da morate vzeti te vrednosti in narediti nekaj sprememb v kodi

5. korak: Projekt po kritiki in pregledu

Projekt po kritiki in pregledu
Projekt po kritiki in pregledu

Nobenega dvoma ni, da smo vsi tukaj, da se učimo in delimo svoje znanje. Zahvaljujoč komentarjem nekaterih ljudi iz skupnosti, ki so mi bili v veliko pomoč, sem se odločil, da bom v svoj projekt naredil nekaj prilagoditev in izboljšav:

Strojna oprema:

Odločil sem se, da vse komponente spajkam v tiskano vezje, da se izognem problemu slabe povezave na ploščah.

Koda:

Prijatelj mi je svetoval, naj uporabim odpravo programske opreme in je samo zanka (na primer zanka "for"), da program vzame nekaj časa, da izbere branje, kar pomeni, da veliko bere (500 v mojem izpitu), vendar traja samo zadnja.

for (i = 1; i <= 500; i ++) {// vzemite le 500. analogno branje

value = analogRead (Button);} // to pomaga, da si vzamemo nekaj časa in se izognemo slabim odčitkom

Drugi prijatelj, zahvaljujoč njemu, mi je svetoval, naj primerjam "readvalue" z nizom vrednosti, ne z enim, ker "readvalue" prevzame veliko vrednosti za isti gumb. "A" na primer daje branje: 849, 850, 851 852, 853, 854, 855, torej je obseg 7 vrednosti: prag (852) in 3 vrednosti levo in desno. kar moramo storiti tukaj, je primerjati absolutno vrednost razlike med "readvalue" in "852" do "3".

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

6. korak: Po nekaj spajkanju

Po nekaj spajkalnih delih
Po nekaj spajkalnih delih
Po nekaj spajkalnih delih
Po nekaj spajkalnih delih
Po nekaj spajkalnih delih
Po nekaj spajkalnih delih

7. korak: trenutek resnice

Kot lahko vidite, program včasih zmede gumbe, vendar še vedno deluje, teoretično s tokokrogom ni nič narobe, vendar koda potrebuje več umerjanja.

8. korak: Konec

Upam, da vam bo ta projekt všeč in ga boste poskušali izvesti, morda vam bo uspelo bolje kot meni.

Vprašajte me, če imate vprašanja, pustite komentarje in ne pozabite glasovati zame, če vam je to všeč.

Priporočena: