Indholdsfortegnelse:

One Pin 4 × 4 tastatur: 10 trin
One Pin 4 × 4 tastatur: 10 trin

Video: One Pin 4 × 4 tastatur: 10 trin

Video: One Pin 4 × 4 tastatur: 10 trin
Video: Run Windows 10 on Android Phone 2024, Juli
Anonim
One Pin 4 × 4 tastatur
One Pin 4 × 4 tastatur

Hver gang jeg ser et tastatur, kommer det med mange pins, det er et stort spild af dine Arduino -pins, så kan vi køre et tastatur med en og kun en pin?. Svaret er her.

Trin 1: Stykliste

Materialeseddel
Materialeseddel

Hardware:

01 Arduino UNO

02 Brødbrætter

01 LCD med I2C

16 trykknapper

04 modstande 1,5 kΩ

04 modstande 620 Ω

04 modstande 220 Ω

08 modstande 100 Ω

01 modstand 1 kΩ

07 Jumperwires

Software:

Arduino IDE installeret på din pc

Trin 2: Skematisk og Cicruit

Skematisk og Cicruit
Skematisk og Cicruit
Skematisk og Cicruit
Skematisk og Cicruit

Hele tanken er, at vi har 4*4 matrix af trykknapper forbundet lodret til jorden med den højre ledning og vandret med den anden ledning (knapledningen) og modstande på 1,5 kΩ, 620Ω, 220Ω og 100Ω, enderne på de 4 rækker er forbundet med fire 100Ω modstande som vist skematisk.

Hver gang du trykker på en knap, lukker du kredsløbet, og strømmen går gennem en anden vej og forskellige modstandskæder, hvorfor pin A0 modtager en anden analog aflæsning for hver trykknap. Alt hvad du har brug for nu er kodning.

Trin 3: Koden

#omfatte

#omfatte

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int -knap = A0;

int læseværdi;

ugyldig opsætning ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (knap, INPUT);

lcd.backlight ();

lcd.print ("Hej verden");

forsinkelse (2000);

lcd.clear ();

lcd.print ("En pin 4*4 tastatur");

forsinkelse (2000); }

hulrum ()

{

readvalue = analogRead (knap);

Serial.println (læseværdi);

hvis (readvalue == 852) {lcd.clear (); lcd.print ("A");}

ellers {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

ellers {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

ellers {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

ellers {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

ellers {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

ellers {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

ellers {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

ellers {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

ellers {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}

ellers {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

ellers {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}

ellers {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

ellers {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}

ellers {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

ellers {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} ellers {}}}}}}}}}}}}}}}}}

Trin 4: Korrektion af værdier

Korrektion af værdier
Korrektion af værdier

Når du åbner den serielle moniter, viser den en værdi på 1023, hvis du trykker på en knap, giver det dig en anden aflæsning, du skal tage disse værdier og foretage nogle ændringer i koden

Trin 5: Projekt efter kritik og anmeldelse

Projekt efter kritik og anmeldelse
Projekt efter kritik og anmeldelse

Der er ingen tvivl om, at vi alle er her for at lære og dele vores viden, takket være nogle kommentarer fra nogle mennesker fra samfundet, der var meget hjælpsomme, besluttede jeg at foretage nogle justeringer og forbedringer af mit projekt:

Hardwaren:

Jeg besluttede at lodde alle komponenter i et printkort for at undgå problemet med dårlig forbindelse i brødbrædderne.

Koden:

En ven rådede mig til at bruge en software, der debouncer, og det er bare en loop (f.eks. "For" loop) for at få programmet til at tage lidt tid at vælge en læsning, det betyder, at det laver en masse læsninger (500 i min eksamen), men tager kun den sidste.

for (i = 1; i <= 500; i ++) {// tag kun den 500. analoge læsning

value = analogRead (Button);} // det er hjælp til at tage lidt tid og undgå dårlige aflæsninger

En anden ven takket være ham rådede mig til at sammenligne "readvalue" med en række værdier ikke en, fordi "readvalue" tager mange værdier for den samme trykknap. "A" giver f.eks. En læsning af: 849, 850, 851852, 853, 854, 855, så det er et område på 7 værdier: en tærskel (852) og 3 værdier til venstre og højre. hvad vi skal gøre her er at sammenligne den absolutte værdi af forskellen mellem "readvalue" og "852" til "3".

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

Trin 6: Efter noget solgt arbejde

Efter noget solgt arbejde
Efter noget solgt arbejde
Efter noget solgt arbejde
Efter noget solgt arbejde
Efter noget solgt arbejde
Efter noget solgt arbejde

Trin 7: Sandhedens øjeblik

Som du kan se, forvirrer programmet nogle gange knapper, men det virker stadig, i teorien er der ikke noget galt med kredsløbet, men koden har brug for mere kalibrering.

Trin 8: Slutningen

Jeg håber, at du kan lide dette projekt, og du prøver at gøre det. Måske vil du gøre det bedre, end jeg gjorde.

Spørg mig, hvis du har spørgsmål, efterlad kommentarer, og glem ikke at stemme på mig, hvis du kan lide det.

Anbefalede: