Innehållsförteckning:

En knapp 4 × 4 knappsats: 10 steg
En knapp 4 × 4 knappsats: 10 steg

Video: En knapp 4 × 4 knappsats: 10 steg

Video: En knapp 4 × 4 knappsats: 10 steg
Video: Место, ГДЕ случилась КРУПНЕЙШАЯ техногеннная КАТАСТРОФА ☢️ БЩУ-4 на ЧЕРНОБЫЛЬСКОЙ АЭС ☢️ 2024, November
Anonim
One Pin 4 × 4 knappsats
One Pin 4 × 4 knappsats

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

Materialförteckning
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

Schematisk och Cicruit
Schematisk och Cicruit
Schematisk och Cicruit
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

Korrigering av värden
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

Projekt efter kritik och granskning
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

Efter lite soldring
Efter lite soldring
Efter lite soldring
Efter lite soldring
Efter lite säljarbete
Efter lite säljarbete

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: