Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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
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
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
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
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
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.