Taula de continguts:
2025 Autora: John Day | [email protected]. Última modificació: 2025-01-13 06:57
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
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
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
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ó
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
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.