Innholdsfortegnelse:

One Pin 4 × 4 tastatur: 10 trinn
One Pin 4 × 4 tastatur: 10 trinn

Video: One Pin 4 × 4 tastatur: 10 trinn

Video: One Pin 4 × 4 tastatur: 10 trinn
Video: Kunjuttan Rocks Epi : 9 | Ball Ferry | M4 Tech | #shorts 2024, November
Anonim
Ett pinne 4 × 4 tastatur
Ett pinne 4 × 4 tastatur

Hver gang jeg ser et tastatur, kommer det med mange pinner, det er et stort sløsing med dine Arduino -pinner, så kan vi kjøre et tastatur med en og bare en pinne?. Svaret er her.

Trinn 1: Materialregning

Stykklister
Stykklister

Maskinvare:

01 Arduino UNO

02 Brødbrett

01 LCD med I2C

16 trykknapper

04 motstander 1,5 kΩ

04 motstander 620 Ω

04 motstander 220 Ω

08 motstander 100 Ω

01 motstand 1 kΩ

07 Hoppetråder

Programvare:

Arduino IDE installert på din PC

Trinn 2: Skjematisk og Cicruit

Skjematisk og Cicruit
Skjematisk og Cicruit
Skjematisk og Cicruit
Skjematisk og Cicruit

Hele ideen er at vi har 4*4 matrise av trykknapper som er koblet vertikalt til bakken med høyre ledning og horisontalt med den andre ledningen (knappledningen) og motstander på 1,5 kΩ, 620Ω, 220Ω og 100Ω, endene på de 4 radene er forbundet med fire 100Ω motstander som vist skjematisk.

Hver gang du trykker på en knapp, lukker du kretsen og strømmen går gjennom en annen bane og forskjellige motstandskjeder, derfor får pin A0 en annen analog lesning for hver trykknapp. Alt du trenger nå er koding.

Trinn 3: Koden

#inkludere

#inkludere

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Knapp = A0;

int leseverdi;

ugyldig oppsett ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Knapp, INNGANG);

lcd.backlight ();

lcd.print ("Hei verden");

forsinkelse (2000);

lcd.clear ();

lcd.print ("Ett penn 4*4 tastatur");

forsinkelse (2000); }

hulrom ()

{

readvalue = analogRead (Button);

Serial.println (leseverdi);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Trinn 4: Korreksjon av verdier

Korreksjon av verdier
Korreksjon av verdier

Når du åpner serieovervåking vil den vise en verdi på 1023, hvis du trykker på en knapp vil det gi deg en annen måling du må ta disse verdiene og gjøre noen endringer i koden

Trinn 5: Prosjekt etter kritikk og anmeldelse

Prosjekt etter kritikk og anmeldelse
Prosjekt etter kritikk og anmeldelse

Det er ingen tvil om at vi alle er her for å lære og dele vår kunnskap, takket være noen kommentarer fra noen mennesker fra samfunnet som var veldig hjelpsomme, bestemte jeg meg for å gjøre noen justeringer og forbedringer av prosjektet mitt:

Maskinvaren:

Jeg bestemte meg for å lodde alle komponentene i et PCB for å unngå problemet med dårlig tilkobling i brødbrettene.

Koden:

En venn rådet meg til å bruke en programvare som debouncing, og det er bare en loop ("for" loop for eksempel) for å få programmet til å ta litt tid å velge en lesning, det betyr at det gjør mange avlesninger (500 i eksamenen min), men tar bare den siste.

for (i = 1; i <= 500; i ++) {// ta bare den 500. analoglesningen

value = analogRead (Button);} // det er hjelp til å ta litt tid og unngå dårlige avlesninger

En annen venn takket være ham rådet meg til å sammenligne "readvalue" med en rekke verdier, ikke en fordi "readvalue" tar mange verdier for den samme trykknappen. "A" gir for eksempel en lesing på: 849, 850, 851852, 853, 854, 855, så det er et område på 7 verdier: en terskel (852) og 3 verdier til venstre og høyre. det vi må gjøre her er å sammenligne den absolutte verdien av forskjellen mellom "readvalue" og "852" til "3".

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

Trinn 6: Etter noe soldringarbeid

Etter litt solgingsarbeid
Etter litt solgingsarbeid
Etter litt soldring
Etter litt soldring
Etter litt soldring
Etter litt soldring

Trinn 7: Sannhetens øyeblikk

Som du kan se, forvirrer programmet noen ganger knapper, men det fungerer fortsatt, i teorien er det ingenting galt med kretsen, men koden trenger mer kalibrering.

Trinn 8: slutten

Jeg håper du liker dette prosjektet og at du prøver å gjøre det. Kanskje du kommer til å gjøre det bedre enn jeg gjorde.

Spør meg om du har spørsmål, legg igjen kommentarer og ikke glem å stemme på meg hvis du liker det.

Anbefalt: