Sadržaj:

Jedan pin 4 × 4 tastatura: 10 koraka
Jedan pin 4 × 4 tastatura: 10 koraka

Video: Jedan pin 4 × 4 tastatura: 10 koraka

Video: Jedan pin 4 × 4 tastatura: 10 koraka
Video: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, Juli
Anonim
Jedan pin 4 × 4 tastatura
Jedan pin 4 × 4 tastatura

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

Korak 1: Opis materijala

Bill of Materials
Bill of Materials

Hardver:

01 Arduino UNO

02 Oglasne ploče

01 LCD sa I2C

16 Tasteri

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čunaru

Korak 2: Shema i Cicruit

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

Ideja je da imamo 4*4 matrice gumba pritisnutih okomito na uzemljenje povezanim desnim kabelom, a vodoravno drugim vodičem (vodičem dugmeta) i otpornicima od 1,5 kΩ, 620Ω, 220Ω i 100Ω, krajevi 4 reda su povezana sa četiri otpornika od 100Ω kako je prikazano na shemi.

Svaki put kada pritisnete dugme, zatvarate krug i struja prolazi kroz drugu putanju i različite lance otpornika, zato pin A0 prima različito analogno očitavanje za svako dugme. Sve što vam sada treba je kodiranje.

Korak 3: Kôd

#include

#include

LiquidCrystal_I2C LCD (0x3f, 20, 4);

int Button = A0;

int readvalue;

void setup ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (dugme, INPUT);

lcd.backlight ();

lcd.print ("Hello World");

kašnjenje (2000);

lcd.clear ();

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

kašnjenje (2000); }

void loop ()

{

readvalue = analogRead (dugme);

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

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

Korak 5: Projekat nakon kritike i pregleda

Projekat nakon kritike i osvrta
Projekat nakon kritike i osvrta

Nema sumnje da smo svi ovdje da učimo i dijelimo svoje znanje, zahvaljujući nekim komentarima koje su ostavili neki 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še veze na matičnim pločama.

Kod:

Prijatelj mi je savjetovao da iskoristim softver za uklanjanje softvera i to je samo petlja (na primjer "za" petlju) kako bi programu bilo potrebno neko vrijeme da odabere čitanje, znači da čini puno čitanja (500 u mom ispitu), ali traje samo poslednji.

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 uporedim "readvalue" s nizom vrijednosti, a ne jednom jer "readvalue" uzima puno vrijednosti za isto dugme. Na primjer "A" daje očitavanje: 849, 850, 851 852, 853, 854, 855 tako da je raspon od 7 vrijednosti: prag (852) i 3 vrijednosti lijevo i desno. ono što moramo učiniti je uporediti apsolutnu vrijednost razlike između "readvalue" i "852" sa "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 nekog lemljenja
Nakon nekog lemljenja
Nakon nekih radova na lemljenju
Nakon nekih radova na lemljenju

Korak 7: Trenutak istine

Kao što vidite, program ponekad zbunjuje tipke, ali i dalje radi, teoretski ništa nije u redu sa krugom, ali kod treba više kalibracije.

Korak 8: Kraj

Nadam se da vam se sviđa ovaj projekt i da ćete pokušati to učiniti, možda ćete biti bolji od mene.

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

Preporučuje se: