Inhoudsopgave:

Een pin 4×4 toetsenbord - Ajarnpa
Een pin 4×4 toetsenbord - Ajarnpa

Video: Een pin 4×4 toetsenbord - Ajarnpa

Video: Een pin 4×4 toetsenbord - Ajarnpa
Video: Solved - Enter The Pin For Your Keyboard [ All Bluetooth Devices Pairing Fix With Windows 10 ] 2022 2024, November
Anonim
Een pin 4×4 toetsenbord
Een pin 4×4 toetsenbord

Elke keer als ik een toetsenbord zie, komt het met veel pinnen, het is een grote verspilling van je Arduino-pinnen, dus kunnen we een toetsenbord gebruiken met één en slechts één pin?. Het antwoord is hier.

Stap 1: Stuklijst

Stuklijst
Stuklijst

Hardware:

01 Arduino UNO

02 Broodplanken

01 LCD met I2C

16 drukknoppen

04 weerstanden 1,5 kΩ

04 weerstanden 620

04 weerstanden 220

08 weerstanden 100

01 weerstand 1 kΩ

07 Jumperdraden

Software:

Arduino IDE geïnstalleerd op uw pc

Stap 2: Schema en Cicruit

Schema en Cicruit
Schema en Cicruit
Schema en Cicruit
Schema en Cicruit

Het hele idee is dat we een 4 * 4-matrix van drukknoppen hebben die verticaal met de grond zijn verbonden door de rechterkabel en horizontaal door de andere kabel (de knopkabel) en weerstanden van 1,5 kΩ, 620Ω, 220Ω en 100Ω, de uiteinden van de 4 rijen zijn verbonden door vier 100Ω-weerstanden zoals weergegeven in het schema.

Elke keer dat je op een knop drukt, sluit je het circuit en gaat de stroom door een ander pad en een andere reeks weerstanden. Daarom krijgt pin A0 voor elke drukknop een andere analoge uitlezing. Alles wat je nu nodig hebt, is coderen.

Stap 3: De code

#erbij betrekken

#erbij betrekken

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int-knop = A0;

int leeswaarde;

ongeldige setup()

{

Serieel.begin(9600);

lcd.begin();

pinMode (Knop, INPUT);

lcd.achtergrondverlichting();

lcd.print("Hallo wereld");

vertraging (2000);

lcd.wissen();

lcd.print ("One pin 4*4-toetsenbord");

vertraging (2000); }

lege lus()

{

leeswaarde = analoog lezen (knop);

Serial.println(leeswaarde);

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

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

anders{ if (leeswaarde==685){lcd.clear();lcd.print("C");}

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

anders{ if (leeswaarde==565){lcd.clear();lcd.print("9");}

anders{ if (leeswaarde==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");}

anders{ if (leeswaarde==349){lcd.clear();lcd.print("5");}

anders{ if (leeswaarde==235){lcd.clear();lcd.print("2");}

anders{ if (leeswaarde==279){lcd.clear();lcd.print("0");}

anders{ if (leeswaarde==452){lcd.clear();lcd.print("7");}

anders{ if (leeswaarde==271){lcd.clear();lcd.print("4");}

anders{ if (leeswaarde==170){lcd.clear();lcd.print("1");}

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

Stap 4: correctie van waarden

Correctie van waarden
Correctie van waarden

Wanneer u de seriële monitor opent, toont deze een waarde van 1023, als u op een knop drukt, krijgt u een andere meting, u moet die waarden nemen en enkele wijzigingen in de code aanbrengen

Stap 5: Project na kritiek en beoordeling

Project na kritiek en beoordeling
Project na kritiek en beoordeling

Het lijdt geen twijfel dat we hier allemaal zijn om te leren en onze kennis te delen, dankzij enkele opmerkingen van enkele mensen uit de gemeenschap die zeer nuttig waren, heb ik besloten om enkele aanpassingen en verbeteringen aan mijn project aan te brengen:

De hardware:

Ik besloot om alle componenten in een PCB te solderen om het probleem van een slechte verbinding in de breadboards te voorkomen.

De code:

Een vriend adviseerde me om een software-debouncing te gebruiken en het is gewoon een lus ("for"-lus bijvoorbeeld) om het programma wat tijd te laten nemen om een read te kiezen, het betekent dat het veel reads maakt (500 in mijn voorbeeld) maar duurt alleen de laatste.

for (i=1; i<= 500; i++) {// neem alleen de 500e analogread

value = analogRead (Button);} // dat is hulp om wat tijd te nemen om slechte metingen te voorkomen

Een andere vriend, dankzij hem, adviseerde me om "leeswaarde" te vergelijken met een reeks waarden, niet één omdat "leeswaarde" veel waarden nodig heeft voor dezelfde drukknop. De "A" geeft bijvoorbeeld een waarde van: 849, 850, 851 852, 853, 854, 855 dus het is een bereik van 7 waarden: een drempel (852) en 3 waarden links en rechts. wat we hier moeten doen, is de absolute waarde van het verschil tussen "leeswaarde" en "852" vergelijken met "3".

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

Stap 6: Na wat soldeerwerk

Na wat soldeerwerk
Na wat soldeerwerk
Na wat soldeerwerk
Na wat soldeerwerk
Na wat soldeerwerk
Na wat soldeerwerk

Stap 7: Het moment van de waarheid

Zoals je kunt zien, verwart het programma soms knoppen, maar het werkt nog steeds, in theorie is er niets mis met het circuit, maar de code heeft meer kalibratie nodig.

Stap 8: Het einde

Ik hoop dat je dit project leuk vindt en dat je het probeert, misschien zul je het beter doen dan ik.

Stel me gerust als je vragen hebt, laat commentaar achter en vergeet niet op me te stemmen als je dat leuk vindt.

Aanbevolen: