Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Sa herë që shoh një tastierë, ajo vjen me shumë kunja, është një humbje e madhe e kunjave tuaj Arduino, kështu që a mund të drejtojmë një tastierë me një dhe vetëm një kunj?. Përgjigja është këtu.
Hapi 1: Fatura e Materialeve
Hardware:
01 Arduino UNO
02 Tabelat e bukës
01 LCD me I2C
16 Shtypni butonat
04 rezistente 1.5 kΩ
04 rezistente 620 Ω
04 rezistente 220 Ω
08 rezistente 100 Ω
01 rezistencë 1 kΩ
07 Tela bluzë
Softuer:
Arduino IDE i instaluar në kompjuterin tuaj
Hapi 2: Skematike dhe Cicruit
E gjithë ideja është se ne kemi matricën 4*4 të butonave të shtypur të lidhur vertikalisht në Tokë nga plumbi i djathtë dhe horizontalisht nga plumbi tjetër (plumbi i butonit) dhe rezistorë prej 1.5 kΩ, 620Ω, 220Ω dhe 100Ω, skajet e 4 rreshtat janë të lidhur me katër rezistorë 100Ω siç tregohet në skemë.
Sa herë që shtypni një buton mbyllni qarkun dhe rryma kalon përmes një rruge të ndryshme dhe zinxhir të ndryshëm të rezistorëve, kjo është arsyeja pse pin A0 merr një lexim analog të ndryshëm për çdo buton. E tëra çfarë ju nevojitet tani është kodimi.
Hapi 3: Kodi
#përfshi
#përfshi
LiquidCrystal_I2C LCD (0x3f, 20, 4);
int Button = A0;
int readvalue;
void setup ()
{
Serial.filloj (9600);
lcd.filloj ();
pinMode (Butoni, HYRJA);
lcd. backlight ();
lcd.print ("Përshëndetje Botë");
vonesa (2000);
lcd.qartë ();
lcd.print ("Një pin 4*4 tastiera");
vonesa (2000); }
lak void ()
{
vlera e leximit = analogRead (Button);
Serial.println (vlera e lexuar);
nëse (vlera e leximit == 852) {lcd.qartë (); lcd.print ("A");}
tjetër {if (vlera e leximit == 763) {lcd.clear (); lcd.print ("B");}
tjetër {if (vlera e leximit == 685) {lcd.clear (); lcd.print ("C");}
tjetër {if (vlera e leximit == 965) {lcd.clear (); lcd.print ("D");}
tjetër {if (vlera e leximit == 565) {lcd.clear (); lcd.print ("9");}
tjetër {if (vlera e leximit == 614) {lcd.clear (); lcd.print ("6");}
tjetër {if (vlera e leximit == 360) {lcd.clear (); lcd.print ("3");}
tjetër {if (vlera e leximit == 335) {lcd.clear (); lcd.print ("#");}
tjetër {if (vlera e leximit == 396) {lcd.clear (); lcd.print ("8");}
tjetër {if (vlera e leximit == 349) {lcd.clear (); lcd.print ("5");}
tjetër {if (vlera e leximit == 235) {lcd.clear (); lcd.print ("2");}
tjetër {if (vlera e leximit == 279) {lcd.clear (); lcd.print ("0");}
tjetër {if (vlera e leximit == 452) {lcd.clear (); lcd.print ("7");}
tjetër {if (vlera e leximit == 271) {lcd.clear (); lcd.print ("4");}
tjetër {if (vlera e leximit == 170) {lcd.clear (); lcd.print ("1");}
else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} else {}}}}}}}}}}}}}}}}}
Hapi 4: Korrigjimi i Vlerave
Kur hapni monitorin serik do të tregojë një vlerë prej 1023, nëse shtypni një buton do t'ju japë një lexim tjetër ju duhet t'i merrni ato vlera dhe të bëni disa ndryshime në kod.
Hapi 5: Projekti Pas Kritikës dhe Rishikimit
Nuk ka dyshim se ne të gjithë jemi këtu për të mësuar dhe ndarë njohuritë tona, falë disa komenteve të lënë nga disa njerëz nga komuniteti që ishin shumë të dobishëm, vendosa të bëj disa rregullime dhe përmirësime në projektin tim:
Pajisja:
Vendosa të bashkoj të gjithë përbërësit në një PCB për të shmangur problemin e lidhjes së keqe në panelet e bukës.
Kodi:
Një mik më këshilloi të përdor një program debouncing dhe është vetëm një lak (lak "për" për shembull) për ta bërë programin të marrë pak kohë për të zgjedhur një lexim do të thotë që ai lexon shumë (500 në provimin tim) por merr vetem e fundit
për (i = 1; i <= 500; i ++) {// merrni vetëm leximin analog të 500 -të
vlera = analogRead (Butoni);} // kjo është ndihmë për të marrë pak kohë për të shmangur leximet e këqija
Një mik tjetër falë tij më këshilloi të krahasoja "vlerën e lexuar" me një sërë vlerash jo një, sepse "vlera e lexuar" merr shumë vlera për të njëjtin buton. "A" për shembull jep një lexim të: 849, 850, 851 852, 853, 854, 855 pra është një diapazon prej 7 vlerash: një prag (852) dhe 3 vlera majtas dhe djathtas. ajo që duhet të bëjmë këtu është të krahasojmë vlerën absolute të diferencës midis "vlerës së lexuar" dhe "852" me "3".
nëse (abs (vlera e leximit-852) <= 8) {lcd.qartë (); lcd.print ("A");}
Hapi 6: Pas disa punimeve të saldimit
Hapi 7: Momenti i së Vërtetës
Siç mund ta shihni, programi ndonjëherë ngatërron butonat, por ai ende punon, në teori nuk ka asgjë të keqe me qarkun, por kodi ka nevojë për më shumë kalibrim.
Hapi 8: Fundi
Shpresoj se ju pëlqen ky projekt dhe përpiqeni ta bëni atë, mbase do të bëni më mirë se unë.
Më pyesni nëse keni pyetje, lini komente dhe mos harroni të votoni për mua nëse ju pëlqen kjo.