Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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.