Obsah:

Klávesnica s jedným pinom 4 × 4: 10 krokov
Klávesnica s jedným pinom 4 × 4: 10 krokov

Video: Klávesnica s jedným pinom 4 × 4: 10 krokov

Video: Klávesnica s jedným pinom 4 × 4: 10 krokov
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Júl
Anonim
One Pin 4 × 4 klávesnica
One Pin 4 × 4 klávesnica

Zakaždým, keď vidím klávesnicu, prichádza s veľkým počtom pinov, je to veľká strata vašich pinov Arduino, môžeme teda spustiť klávesnicu s jediným a jediným pinom?. Odpoveď je tu.

Krok 1: Kusovník

Kusovník
Kusovník

Hardvér:

01 Arduino UNO

02 Breadboards

01 LCD s I2C

16 tlačidiel

04 odpory 1,5 kΩ

04 odpory 620 Ω

04 odpory 220 Ω

08 odpory 100 Ω

01 odpor 1 kΩ

07 prepojovacie vodiče

Softvér:

Arduino IDE nainštalované vo vašom počítači

Krok 2: Schéma a cicruit

Schéma a cicruit
Schéma a cicruit
Schéma a cicruit
Schéma a cicruit

Celá myšlienka je, že máme 4*4 maticu tlačidiel pripojených zvisle k zemi pravým vodičom a horizontálne druhým vodičom (káblom tlačidla) a odpory 1,5 kΩ, 620Ω, 220Ω a 100Ω, konce 4 rady sú prepojené štyrmi odpormi 100Ω, ako je znázornené na schéme.

Zakaždým, keď stlačíte tlačidlo, zatvoríte obvod a prúd prejde inou cestou a iným reťazcom odporov, preto pin A0 dostane pre každé tlačidlo iné analógové čítanie. Všetko, čo teraz potrebujete, je kódovanie.

Krok 3: Kód

#zahrnúť

#zahrnúť

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int tlačidlo = A0;

int hodnota čítania;

neplatné nastavenie ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (tlačidlo, VSTUP);

lcd.backlight ();

lcd.print („Hello World“);

oneskorenie (2000);

lcd.clear ();

lcd.print („klávesnica s jedným pinom 4*4“);

oneskorenie (2000); }

prázdna slučka ()

{

readvalue = analogRead (tlačidlo);

Serial.println (hodnota čítania);

if (readvalue == 852) {lcd.clear (); lcd.print ("A");}

else {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

else {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}

else {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}

else {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}

else {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}

else {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}

else {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}

else {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}

else {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}

else {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}

else {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}

else {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}

else {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}

else {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}

else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}

Krok 4: Oprava hodnôt

Korekcia hodnôt
Korekcia hodnôt

Keď otvoríte sériový monitor, zobrazí hodnotu 1023, ak stlačíte tlačidlo, zobrazí sa ďalšie čítanie, musíte tieto hodnoty zobrať a vykonať určité zmeny v kóde.

Krok 5: Projekt po kritike a preskúmaní

Projekt po kritike a preskúmaní
Projekt po kritike a preskúmaní

Nie je pochýb o tom, že sme tu všetci, aby sme sa učili a zdieľali svoje znalosti. Vďaka niektorým komentárom, ktoré niektorí ľudia z komunity veľmi pomohli, som sa rozhodol urobiť niekoľko úprav a vylepšení svojho projektu:

Hardvér:

Rozhodol som sa spájkovať všetky súčiastky na doske plošných spojov, aby som predišiel problému so zlým pripojením v doskách.

Kód:

Priateľ mi poradil, aby som použil softvér na odskakovanie softvéru a je to len slučka (napríklad slučka „pre“), aby programu nejaký čas trvalo, kým si vyberie čítanie, to znamená, že urobí veľa prečítaní (500 v mojom teste), ale zaberie to len ten posledný.

pre (i = 1; i <= 500; i ++) {// vezmite iba 500. analógové vlákno

value = analogRead (Button);} // to je čas, ktorý vám pomôže vyhnúť sa zlým hodnotám

Ďalší priateľ, ktorý mu poďakoval, mi poradil, aby som porovnal „hodnotu čítania“s rozsahom hodnôt, nie s jednou, pretože „hodnota pre čítanie“pre to isté tlačidlo vyžaduje veľa hodnôt. „A“napríklad ukazuje: 849, 850, 851 852, 853, 854, 855, takže je to rozsah 7 hodnôt: prahová hodnota (852) a 3 hodnoty vľavo a vpravo. musíme tu porovnať absolútnu hodnotu rozdielu medzi „hodnotou čítania“a „852“s „3“.

if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}

Krok 6: Po niekoľkých spájkovacích prácach

Po troche spájkovacích prác
Po troche spájkovacích prác
Po troche spájkovacích prác
Po troche spájkovacích prác
Po nejakej spájkovacej práci
Po nejakej spájkovacej práci

Krok 7: Moment pravdy

Ako vidíte, program niekedy zamieňa tlačidlá, ale stále funguje, teoreticky na obvode nie je nič zlé, ale kód vyžaduje väčšiu kalibráciu.

Krok 8: Koniec

Dúfam, že sa vám tento projekt páči a pokúsite sa ho urobiť, možno sa vám bude dariť lepšie ako mne.

Ak máte otázky, opýtajte sa ma, nechajte komentáre a nezabudnite mi dať hlas, ak sa vám to páči.

Odporúča: