Innehållsförteckning:
- Steg 1: Materialförteckning
- Steg 2: Schematisk och Cicruit
- Steg 3: Koden
- Steg 4: Korrigering av värden
- Steg 5: Projekt efter kritik och granskning
- Steg 6: Efter lite försäljningsarbete
- Steg 7: Sanningens ögonblick
- Steg 8: Slutet
Video: En knapp 4 × 4 knappsats: 10 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Varje gång jag ser en knappsats kommer den med många stift, det är ett stort slöseri med dina Arduino -stift, så kan vi köra en knappsats med en och bara en stift?. Svaret finns här.
Steg 1: Materialförteckning
Hårdvara:
01 Arduino UNO
02 Brödbrädor
01 LCD med I2C
16 tryckknappar
04 motstånd 1,5 kΩ
04 motstånd 620 Ω
04 motstånd 220 Ω
08 motstånd 100 Ω
01 motstånd 1 kΩ
07 Bygelkablar
Programvara:
Arduino IDE installerat på din dator
Steg 2: Schematisk och Cicruit
Hela tanken är att vi har 4*4 matris av tryckknappar som är anslutna vertikalt till marken med den högra ledningen och horisontellt med den andra ledningen (knappledningen) och motstånd på 1,5 kΩ, 620Ω, 220Ω och 100Ω, ändarna på de fyra raderna är anslutna med fyra 100Ω motstånd enligt schemat.
Varje gång du trycker på en knapp stänger du kretsen och strömmen går genom en annan väg och olika motståndskedjor, det är därför stift A0 får en annan analog läsning för varje tryckknapp. Allt du behöver nu är kodning.
Steg 3: Koden
#omfatta
#omfatta
LiquidCrystal_I2C lcd (0x3f, 20, 4);
int Knapp = A0;
int läsvärde;
void setup ()
{
Serial.begin (9600);
lcd.begin ();
pinMode (knapp, INGÅNG);
lcd.backlight ();
lcd.print ("Hej världen");
fördröjning (2000);
lcd.clear ();
lcd.print ("En stift 4*4 knappsats");
fördröjning (2000); }
void loop ()
{
readvalue = analogRead (Button);
Serial.println (läsvärde);
if (läsvärde == 852) {lcd.clear (); lcd.print ("A");}
annars {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}
annars {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}
annars {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}
annars {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}
annars {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}
annars {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}
annars {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}
annars {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}
annars {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}
annars {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}
annars {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}
annars {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}
annars {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}
annars {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}
annars {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} annars {}}}}}}}}}}}}}}}}}
Steg 4: Korrigering av värden
När du öppnar seriemonitorn visar det ett värde på 1023, om du trycker på en knapp kommer det att ge dig en annan avläsning du måste ta dessa värden och göra några ändringar i koden
Steg 5: Projekt efter kritik och granskning
Det råder ingen tvekan om att vi alla är här för att lära oss och dela vår kunskap, tack vare några kommentarer från några människor från samhället som var till stor hjälp, bestämde jag mig för att göra några justeringar och förbättringar av mitt projekt:
Hårdvaran:
Jag bestämde mig för att lödda alla komponenter i ett kretskort för att undvika problemet med dålig anslutning i brödbrädorna.
Koden:
En vän rådde mig att använda en programvara som debouncer och det är bara en loop ("för" loop till exempel) för att få programmet att ta lite tid att välja en läsning, det betyder att det gör många läsningar (500 i min examen) men tar bara den sista.
för (i = 1; i <= 500; i ++) {// ta bara den 500: e analogläsningen
value = analogRead (Button);} // det hjälper att ta lite tid och undvika dåliga avläsningar
En annan vän tack vare honom rådde mig att jämföra "läsvärde" med ett värdeintervall inte ett eftersom "läsvärde" tar många värden för samma tryckknapp. "A" ger till exempel en läsning av: 849, 850, 851852, 853, 854, 855 så det är ett intervall på 7 värden: ett tröskelvärde (852) och 3 värden vänster och höger. vad vi måste göra här är att jämföra det absoluta värdet av skillnaden mellan "läsvärde" och "852" till "3".
if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}
Steg 6: Efter lite försäljningsarbete
Steg 7: Sanningens ögonblick
Som du kan se förvirrar programmet ibland knappar men det fungerar fortfarande, i teorin är det inget fel med kretsen men koden behöver mer kalibrering.
Steg 8: Slutet
Jag hoppas att du gillar det här projektet och du försöker göra det, kanske du kommer att göra det bättre än jag gjorde.
Fråga mig om du har frågor, lämna kommentarer och glöm inte att rösta på mig om du gillar det.
Rekommenderad:
Knappsats Servolås: 5 steg
Knappsats Servolås: Hej alla, hoppas ni haft en bra dag. Om inte förhoppningsvis kan du bara spola tillbaka med lite öppet sinne för denna handledning och lite terapeutisk musik. Programmering kan vara ett krångel. Tack och lov är denna handledning inte ett krångel, så du kanske kan åstadkomma
Arduino mekanisk knappsats: 5 steg (med bilder)
Arduino mekanisk knappsats: Jag behövde en stiftplatta för ett annat projekt, så jag bestämde mig för att göra en knappsats med delar jag hade hemma
Arduino -räknare med 4X4 knappsats: 4 steg (med bilder)
Arduino -kalkylator med hjälp av 4X4 knappsats: I denna handledning kommer vi att bygga vår egen miniräknare med Arduino. Värdena kan skickas in via en knappsats (4 × 4 knappsats) och resultatet kan ses på en LCD -skärm. Denna räknare kan utföra enkla operationer som addition, subtraktion, multiplikation
Arduino knappsats 4x4 handledning: 4 steg (med bilder)
Arduino knappsats 4x4 Handledning: Knappsatsingång visades för seriell bildskärm med arduino uno och 4x4 knappsats full kod
Programmerbar knappsats: 5 steg (med bilder)
Programmerbar knappsats: I det här projektet ska jag visa hur man gör relativt enkla och billiga programmerbara knappsatser för att kartlägga dina mest använda kortkommandon, applikationer med mera. Denna knappsats upptäcks som tangentbord i alla större operativsystem, inga ytterligare drivrutiner behövs