Taula de continguts:

Teclat One Pin 4 × 4: 10 passos
Teclat One Pin 4 × 4: 10 passos

Vídeo: Teclat One Pin 4 × 4: 10 passos

Vídeo: Teclat One Pin 4 × 4: 10 passos
Vídeo: Treme Treme 2024, De novembre
Anonim
Un teclat de 4 x 4 pins
Un teclat de 4 x 4 pins

Cada vegada que veig un teclat, ve amb molts pins, és un gran malbaratament dels pins d'Arduino, de manera que podem executar un teclat amb un sol pin?. La resposta és aquí.

Pas 1: llista de materials

Factura de materials
Factura de materials

Maquinari:

01 Arduino UNO

02 Taules de pa

01 LCD amb I2C

16 polsadors

04 resistències 1,5 kΩ

04 resistències 620 Ω

04 resistències de 220 Ω

08 resistències 100 Ω

01 resistència 1 kΩ

07 cables de pont

Programari:

Arduino IDE instal·lat al vostre PC

Pas 2: Esquema i Cicruit

Esquema i Cicruit
Esquema i Cicruit
Esquema i Cicruit
Esquema i Cicruit

La idea és que tenim una matriu de 4 * 4 de botons connectats verticalment a terra pel cable dret i horitzontalment per l’altre cable (el cable de botó) i resistències d’1,5 kΩ, 620Ω, 220Ω i 100Ω, els extrems de les 4 files estan connectades per quatre resistències de 100Ω tal com es mostra a l'esquema.

Cada vegada que premeu un botó, tanqueu el circuit i el corrent passa per un camí diferent i una cadena de resistències diferent, per això el pin A0 rep una lectura analògica diferent per a cada polsador. Tot el que necessiteu ara és codificació.

Pas 3: el codi

#incloure

#incloure

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Botó = A0;

int readvalue;

configuració nul·la ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Button, INPUT);

lcd.backlight ();

lcd.print ("Hello World");

endarreriment (2000);

lcd.clear ();

lcd.print ("Teclat amb un pin 4 * 4");

endarreriment (2000); }

bucle buit ()

{

readvalue = analogRead (Button);

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 {}}}}}}}}}}}}}}}}}}

Pas 4: Correcció de valors

Correcció de valors
Correcció de valors

Quan obriu el monitoreu en sèrie mostrarà un valor de 1023, si premeu un botó us donarà una altra lectura, heu de prendre aquests valors i fer alguns canvis al codi

Pas 5: projecte després de la crítica i la revisió

Projecte després de la crítica i la revisió
Projecte després de la crítica i la revisió

No hi ha dubte que tots som aquí per aprendre i compartir el nostre coneixement, gràcies a alguns comentaris que algunes persones de la comunitat van deixar molt útils i vaig decidir fer alguns ajustaments i millores al meu projecte:

El maquinari:

Vaig decidir soldar tots els components d'un PCB per evitar el problema de la mala connexió a les taules de suport.

El codi:

Un amic em va aconsellar que utilitzeu un programari de denúncia i només és un bucle (per exemple) per fer que el programa trigui a triar una lectura, vol dir que fa moltes lectures (500 en el meu examen), però només l'últim.

for (i = 1; i <= 500; i ++) {// pren només la 500a lectura analògica

value = analogRead (Button);} // això ajuda a trigar una estona a evitar males lectures

Un altre amic gràcies a ell em va aconsellar que comparés "readvalue" amb un rang de valors no un, perquè "readvalue" pren molts valors per al mateix polsador. Per exemple, "A" dóna una lectura de: 849, 850, 851 852, 853, 854, 855, de manera que es tracta d'un interval de 7 valors: un llindar (852) i 3 valors a l'esquerra i a la dreta. el que hem de fer aquí és comparar el valor absolut de la diferència entre "readvalue" i "852" amb "3".

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

Pas 6: després d'alguns treballs de soldring

Després d'alguns treballs de soldring
Després d'alguns treballs de soldring
Després d'alguns treballs de soldring
Després d'alguns treballs de soldring
Després d'alguns treballs de soldring
Després d'alguns treballs de soldring

Pas 7: El moment de la veritat

Com podeu veure, el programa de vegades confon botons, però encara funciona, en teoria no hi ha cap problema amb el circuit, però el codi necessita més calibratge.

Pas 8: el final

Espero que aquest projecte us agradi i ho intenteu, potser ho fareu millor que a mi.

Pregunteu-me si teniu preguntes, deixeu comentaris i no oblideu votar-me si us agrada.

Recomanat: