INHOUDSOPGAWE:
- Stap 1: Staatsbrief
- Stap 2: Skematiese en Cicruit
- Stap 3: Die kode
- Stap 4: Regstelling van waardes
- Stap 5: Projek na kritiek en hersiening
- Stap 6: Na 'n paar verkope werk
- Stap 7: Die oomblik van waarheid
- Stap 8: Die einde
Video: One Pin 4 × 4 -klavier: 10 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Elke keer as ek 'n bedieningspaneel sien, bevat dit baie penne; dit is 'n groot vermorsing van u Arduino -penne, so kan ons 'n bedieningspaneel met 'n enkele pen gebruik?. Die antwoord is hier.
Stap 1: Staatsbrief
Hardeware:
01 Arduino UNO
02 Broodplanke
01 LCD met I2C
16 drukknoppies
04 weerstande 1,5 kΩ
04 weerstande 620 Ω
04 weerstande 220 Ω
08 weerstande 100 Ω
01 weerstand 1 kΩ
07 Springdrade
Sagteware:
Arduino IDE op u rekenaar geïnstalleer
Stap 2: Skematiese en Cicruit
Die hele idee is dat ons 'n 4*4 matriks van drukknoppies het wat vertikaal aan die grond gekoppel is deur die regte leiding en horisontaal deur die ander leiding (die knoppie) en weerstande van 1,5 kΩ, 620Ω, 220Ω en 100Ω, die ente van die 4 rye is verbind deur vier 100Ω weerstande, soos die skematiese voorstelling toon.
Elke keer as u op 'n knoppie druk, sluit u die stroombaan en die stroom gaan deur 'n ander pad en weerstandsketting, daarom kry pin A0 'n ander analooglesing vir elke drukknop. Al wat u nou nodig het, is kodering.
Stap 3: Die kode
#insluit
#insluit
LiquidCrystal_I2C lcd (0x3f, 20, 4);
int Knoppie = A0;
int leeswaarde;
leemte opstelling ()
{
Serial.begin (9600);
lcd.begin ();
pinMode (knoppie, INVOER);
lcd.backlight ();
lcd.print ("Hallo wêreld");
vertraging (2000);
lcd.clear ();
lcd.print ("One pin 4*4 keyboard");
vertraging (2000); }
leemte lus ()
{
leeswaarde = analogRead (knoppie);
Serial.println (leeswaarde);
if (leeswaarde == 852) {lcd.clear (); lcd.print ("A");}
anders {if (leeswaarde == 763) {lcd.clear (); lcd.print ("B");}
anders {if (leeswaarde == 685) {lcd.clear (); lcd.print ("C");}
anders {if (leeswaarde == 965) {lcd.clear (); lcd.print ("D");}
anders {if (leeswaarde == 565) {lcd.clear (); lcd.print ("9");}
anders {if (leeswaarde == 614) {lcd.clear (); lcd.print ("6");}
anders {if (leeswaarde == 360) {lcd.clear (); lcd.print ("3");}
anders {if (leeswaarde == 335) {lcd.clear (); lcd.print ("#");}
anders {if (leeswaarde == 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 (leeswaarde == 92) {lcd.clear (); lcd.print ("*");} anders {}}}}}}}}}}}}}}}}}
Stap 4: Regstelling van waardes
As u die seriële moniter oopmaak, sal dit 'n waarde van 1023 toon, as u op 'n knoppie druk, sal dit u weer 'n lesing gee; u moet die waardes neem en 'n paar veranderinge aanbring in die kode
Stap 5: Projek na kritiek en hersiening
Daar is geen twyfel dat ons almal hier is om te leer en ons kennis te deel nie, danksy 'n paar opmerkings wat baie mense uit die gemeenskap gelaat het, het ek besluit om 'n paar aanpassings en verbeterings aan my projek aan te bring:
Die hardeware:
Ek het besluit om alle komponente in 'n PCB te soldeer om die probleem van 'n slegte verbinding in die broodborde te vermy.
Die kode:
'N Vriend het my aangeraai om 'n sagteware -ontbinding te gebruik, en dit is slegs 'n lus (byvoorbeeld' vir 'lus) om die program 'n rukkie te neem om te lees, dit beteken dat dit baie lees (500 in my eksamen), maar dit neem net die laaste een.
vir (i = 1; i <= 500; i ++) {// neem slegs die 500ste analoog
value = analogRead (Button);} // dit help om 'n rukkie te neem om slegte lesings te vermy
'N Ander vriend, te danke aan hom, het my aangeraai om' leeswaarde 'te vergelyk met 'n reeks waardes, nie een nie, want' leeswaarde 'verg baie waardes vir dieselfde drukknop. Die' A 'gee byvoorbeeld 'n lees van: 849, 850, 851 852, 853, 854, 855, dus dit is 'n reeks van 7 waardes: 'n drempel (852) en 3 waardes links en regs. wat ons hier moet doen, is om die absolute waarde van die verskil tussen "leeswaarde" en "852" met "3" te vergelyk.
if (abs (leeswaarde-852) <= 8) {lcd.clear (); lcd.print ("A");}
Stap 6: Na 'n paar verkope werk
Stap 7: Die oomblik van waarheid
Soos u kan sien, verwar die program soms knoppies, maar dit werk steeds, in teorie is daar niks verkeerd met die kring nie, maar die kode benodig meer kalibrasie.
Stap 8: Die einde
Ek hoop dat u van hierdie projek hou en dat u dit probeer doen, miskien sal u beter doen as ek.
Vra my as u vrae het, lewer kommentaar en moenie vergeet om vir my te stem as u daarvan hou nie.
Aanbeveel:
ESP -01 Programmer Hack - the Easy One :): 6 stappe
ESP-01 Programmer Hack-the Easy One :): Hallo ESPers, in hierdie instruksies sal ek u 'n eenvoudige hack wys om 'n programmeerder vir die ESP-01 / ESP8266-01 / ES-01-module te maak. Die meeste van ons het 'n Arduino-bord of FTDI USB-TTL-toestelle as programmeerders vir hierdie module gebruik. Beide metodes werk goed. Maar t
Rover-One: gee 'n breinvragmotor/motor 'n brein: 11 stappe
Rover-One: 'n brein aan 'n RC-vragmotor/motor gee: hierdie instruksie is op 'n PCB wat ek ontwerp het, genaamd Rover-One. Rover-One is 'n oplossing wat ek ontwerp het om 'n speelgoed-RC-motor/-vragmotor te neem en 'n brein te gee wat komponente bevat om die omgewing daarvan te voel. Rover-One is 'n printplaat van 100 mm x 100 mm wat ontwerp is in EasyED
Hoe om 'n Xbox One -beheerder aan 'n Windows 10 -skootrekenaar te koppel: 16 stappe
Hoe om 'n Xbox One -beheerder aan 'n Windows 10 -skootrekenaar te koppel: U benodig: Xbox -beheerder Windows 10 -skootrekenaar
Xbox One S No Signal HDMI -herstel: 5 stappe
Xbox One S No Signal HDMI Repair: 'n Rukkie gelede het ek 'n paar YouTube -video's begin kyk oor die herstel van allerhande spelkonsole. Meestal het hierdie konsoles 'n algemene probleem gehad: alles werk, maar die skerm en gewoonlik was die vervanging van die hdmi -poort genoeg om die probleem op te los
ISP 6 Pin tot 8 Pin Socket: 4 stappe
ISP 6 Pin tot 8 Pin Socket: Die rede waarom ek hoofsaaklik hierdie projek gebou het, was om die ATTiny45, wat 'n 8 -pins -verbinding het, te programmeer, terwyl my USBtinyISP (van Ladyada) slegs 'n 10 -pins en 6 -pins -verbinding het. Nadat ek ongeveer 3-4 weke op die internet gesnuffel het, het ek niks gevind nie