Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Svaki put kad vidim tipkovnicu, dolazi s puno pinova, to je veliki gubitak vaših Arduino pinova, pa možemo li pokrenuti tipkovnicu s jednim i samo jednim pinom?. Odgovor je ovdje.
Korak 1: Opis materijala
Hardver:
01 Arduino UNO
02 Oglasne ploče
01 LCD sa I2C
16 Tasteri
04 otpornika 1,5 kΩ
04 otpornika 620 Ω
04 otpornika 220 Ω
08 otpornika 100 Ω
01 otpornik 1 kΩ
07 Kratkospojne žice
Softver:
Arduino IDE instaliran na vašem računaru
Korak 2: Shema i Cicruit
Ideja je da imamo 4*4 matrice gumba pritisnutih okomito na uzemljenje povezanim desnim kabelom, a vodoravno drugim vodičem (vodičem dugmeta) i otpornicima od 1,5 kΩ, 620Ω, 220Ω i 100Ω, krajevi 4 reda su povezana sa četiri otpornika od 100Ω kako je prikazano na shemi.
Svaki put kada pritisnete dugme, zatvarate krug i struja prolazi kroz drugu putanju i različite lance otpornika, zato pin A0 prima različito analogno očitavanje za svako dugme. Sve što vam sada treba je kodiranje.
Korak 3: Kôd
#include
#include
LiquidCrystal_I2C LCD (0x3f, 20, 4);
int Button = A0;
int readvalue;
void setup ()
{
Serial.begin (9600);
lcd.begin ();
pinMode (dugme, INPUT);
lcd.backlight ();
lcd.print ("Hello World");
kašnjenje (2000);
lcd.clear ();
lcd.print ("Jedan pin 4*4 tastatura");
kašnjenje (2000); }
void loop ()
{
readvalue = analogRead (dugme);
Serial.println (readvalue);
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 {}}}}}}}}}}}}}}}}}
Korak 4: Ispravljanje vrijednosti
Kada otvorite serijski monitor, on će pokazati vrijednost 1023, ako pritisnete gumb, to će vam dati još jedno očitanje, morate uzeti te vrijednosti i unijeti neke promjene u kôd
Korak 5: Projekat nakon kritike i pregleda
Nema sumnje da smo svi ovdje da učimo i dijelimo svoje znanje, zahvaljujući nekim komentarima koje su ostavili neki ljudi iz zajednice koji su mi bili od velike pomoći, odlučio sam unijeti neke prilagodbe i poboljšanja u svoj projekt:
Hardver:
Odlučio sam lemiti sve komponente na PCB -u kako bih izbjegao problem loše veze na matičnim pločama.
Kod:
Prijatelj mi je savjetovao da iskoristim softver za uklanjanje softvera i to je samo petlja (na primjer "za" petlju) kako bi programu bilo potrebno neko vrijeme da odabere čitanje, znači da čini puno čitanja (500 u mom ispitu), ali traje samo poslednji.
for (i = 1; i <= 500; i ++) {// uzeti samo 500. analogno čitanje
value = analogRead (Button);} // to pomaže da se odvoji neko vrijeme i izbjegnu loša očitanja
Drugi prijatelj, zahvaljujući njemu, savjetovao mi je da uporedim "readvalue" s nizom vrijednosti, a ne jednom jer "readvalue" uzima puno vrijednosti za isto dugme. Na primjer "A" daje očitavanje: 849, 850, 851 852, 853, 854, 855 tako da je raspon od 7 vrijednosti: prag (852) i 3 vrijednosti lijevo i desno. ono što moramo učiniti je uporediti apsolutnu vrijednost razlike između "readvalue" i "852" sa "3".
if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}
Korak 6: Nakon malo lemljenja
Korak 7: Trenutak istine
Kao što vidite, program ponekad zbunjuje tipke, ali i dalje radi, teoretski ništa nije u redu sa krugom, ali kod treba više kalibracije.
Korak 8: Kraj
Nadam se da vam se sviđa ovaj projekt i da ćete pokušati to učiniti, možda ćete biti bolji od mene.
Pitajte me ako imate pitanja, ostavite komentare i, ako vam se sviđa, ne zaboravite glasati za mene.