INHOUDSOPGAWE:

One Pin 4 × 4 -klavier: 10 stappe
One Pin 4 × 4 -klavier: 10 stappe

Video: One Pin 4 × 4 -klavier: 10 stappe

Video: One Pin 4 × 4 -klavier: 10 stappe
Video: 3 мегапикселя камера видеонаблюдения. Стоит ли покупать? На что влияет разрешение? 2024, November
Anonim
One Pin 4 × 4 Toetsenbord
One Pin 4 × 4 Toetsenbord

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

Staatsbrief
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

Skematiese en Cicruit
Skematiese en Cicruit
Skematiese en Cicruit
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

Regstelling van waardes
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

Projek na kritiek en hersiening
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

Na 'n paar verkoop werk
Na 'n paar verkoop werk
Na 'n paar verkoop werk
Na 'n paar verkoop werk
Na 'n paar verkoop werk
Na 'n paar verkoop 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: