Sadržaj:

Jedan pin 4 × 4 tipkovnica: 10 koraka
Jedan pin 4 × 4 tipkovnica: 10 koraka

Video: Jedan pin 4 × 4 tipkovnica: 10 koraka

Video: Jedan pin 4 × 4 tipkovnica: 10 koraka
Video: 10 самых АТМОСФЕРНЫХ мест Дагестана. БОЛЬШОЙ ВЫПУСК #Дагестан #ПутешествиеПоДагестану 2024, Studeni
Anonim
Jedan pin 4 × 4 tipkovnica
Jedan pin 4 × 4 tipkovnica

Svaki put kad vidim tipkovnicu, dolazi s puno pinova, veliki je gubitak vaših Arduino pinova, pa možemo li pokrenuti tipkovnicu s jednim i samo jednim pinom?. Odgovor je ovdje.

Korak 1: Opis materijala

Predmet materijala
Predmet materijala

Hardver:

01 Arduino UNO

02 Oglasne ploče

01 LCD sa I2C

16 Tipke

04 otpornika 1,5 kΩ

04 otpornika 620 Ω

04 otpornika 220 Ω

08 otpornika 100 Ω

01 otpornik 1 kΩ

07 Kratkospojne žice

Softver:

Arduino IDE instaliran na vašem računalu

Korak 2: Shema i Cicruit

Shema i Cicruit
Shema i Cicruit
Shema i Cicruit
Shema i Cicruit

Zamisao je u tome da imamo matricu gumba od 4*4 koja su okomito povezana s uzemljenjem desnim kabelom, a vodoravno drugim kalemom (kabel gumba) i otpornicima od 1,5 kΩ, 620Ω, 220Ω i 100Ω, a krajevi 4 reda su povezana s četiri otpornika od 100Ω kako je prikazano na shemi.

Svaki put kada pritisnete gumb, zatvarate krug i struja prolazi drugačijim putem i različitim lancem otpornika, zato pin A0 prima različito analogno očitanje za svaki gumb. Sve što vam sada treba je kodiranje.

Korak 3: Kôd

#uključi

#uključi

LiquidCrystal_I2C LCD (0x3f, 20, 4);

int Gumb = A0;

int readvalue;

void setup ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (gumb, INPUT);

lcd.backlight ();

lcd.print ("Zdravo Svijete");

odgoda (2000);

lcd.clear ();

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

odgoda (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 {}}}}}}}}}}}}}}}}}

Korak 4: Ispravljanje vrijednosti

Korekcija vrijednosti
Korekcija vrijednosti

Kad otvorite serijski monitor, on će pokazati vrijednost 1023, ako pritisnete gumb, dobit ćete još jedno očitanje, morate uzeti te vrijednosti i unijeti neke promjene u kôd

Korak 5: Projekt nakon kritike i pregleda

Projekt nakon kritike i osvrta
Projekt nakon kritike i osvrta

Nema sumnje da smo svi ovdje kako bismo naučili i podijelili svoje znanje, zahvaljujući nekim komentarima nekih ljudi iz zajednice koji su mi bili od velike pomoći, odlučio sam unijeti neke prilagodbe i poboljšanja u svoj projekt:

Hardver:

Odlučio sam lemiti sve komponente na PCB -u kako bih izbjegao problem lošeg povezivanja na matičnim pločama.

Kod:

Prijatelj mi je savjetovao da upotrijebim softver za otkazivanje i to je samo petlja (na primjer "za" petlju) kako bi programu trebalo neko vrijeme da odabere čitanje, što znači da čini puno čitanja (500 u mom ispitu), ali traje samo posljednji.

for (i = 1; i <= 500; i ++) {// uzeti samo 500. analogno čitanje

value = analogRead (Button);} // to pomaže da se odvoji neko vrijeme i izbjegnu loša očitanja

Drugi prijatelj, zahvaljujući njemu, savjetovao mi je da usporedim "readvalue" s rasponom vrijednosti, a ne s jednim jer "readvalue" uzima puno vrijednosti za isti gumb. Na primjer "A" daje čitanje: 849, 850, 851 852, 853, 854, 855 pa je to raspon od 7 vrijednosti: prag (852) i 3 vrijednosti lijevo i desno. ono što moramo učiniti je usporediti apsolutnu vrijednost razlike između "readvalue" i "852" s "3".

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

Korak 6: Nakon malo lemljenja

Nakon nekih radova na lemljenju
Nakon nekih radova na lemljenju
Nakon nekih radova na lemljenju
Nakon nekih radova na lemljenju
Nakon nekih radova na lemljenju
Nakon nekih radova na lemljenju

Korak 7: Trenutak istine

Kao što vidite, program ponekad zbunjuje gumbe, ali i dalje radi, u teoriji nema problema s krugom, ali kôd treba više kalibracije.

Korak 8: Kraj

Nadam se da vam se sviđa ovaj projekt i da ćete ga pokušati izvesti, možda ćete biti bolji od mene.

Pitajte me ako imate pitanja, ostavite komentare i ne zaboravite glasati za mene ako vam se to sviđa.

Preporučeni: