Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
De fiecare dată când văd o tastatură, vine cu o mulțime de pini, este o risipă mare de pini Arduino dvs., deci putem rula o tastatură cu un singur pin?. Răspunsul este aici.
Pasul 1: Lista materialelor
Hardware:
01 Arduino UNO
02 Panouri
01 LCD cu I2C
16 Butoane
04 rezistențe 1,5 kΩ
04 rezistențe 620 Ω
04 rezistențe 220 Ω
08 rezistențe 100 Ω
01 rezistor 1 kΩ
07 Sârme jumper
Software:
Arduino IDE instalat pe computer
Pasul 2: Schematic și Cicruit
Ideea este că avem matricea 4 * 4 a butoanelor conectate vertical la sol prin cablul drept și orizontal de celălalt cablu (cablul butonului) și rezistențe de 1,5 kΩ, 620Ω, 220Ω și 100Ω, capetele cele 4 rânduri sunt conectate prin patru rezistențe de 100Ω, așa cum se arată în schemă.
De fiecare dată când apăsați un buton închideți circuitul și curentul trece printr-o cale diferită și un lanț diferit de rezistențe, de aceea pinul A0 primește o citire analogică diferită pentru fiecare buton. Tot ce aveți nevoie acum este codarea.
Pasul 3: Codul
#include
#include
LiquidCrystal_I2C lcd (0x3f, 20, 4);
Buton int = A0;
int readvalue;
configurare nulă ()
{
Serial.begin (9600);
lcd.begin ();
pinMode (Buton, INPUT);
lcd.backlight ();
lcd.print („Hello World”);
întârziere (2000);
lcd.clear ();
lcd.print („Tastatură cu un pin 4 * 4”);
întârziere (2000); }
bucla nulă ()
{
readvalue = analogRead (Buton);
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 {}}}}}}}}}}}}}}}}}}
Pasul 4: corectarea valorilor
Când deschideți moniterul serial, acesta va afișa o valoare de 1023, dacă apăsați un buton, vă va da o altă lectură, trebuie să luați acele valori și să faceți unele modificări în cod
Pasul 5: Proiect după critică și revizuire
Nu există nicio îndoială că suntem cu toții aici pentru a învăța și a ne împărtăși cunoștințele, datorită unor comentarii lăsate de unii oameni din comunitate care au fost de mare ajutor, am decis să fac câteva ajustări și îmbunătățiri proiectului meu:
Hardware-ul:
Am decis să lipesc toate componentele într-un PCB pentru a evita problema conexiunii defectuoase în panourile de disc.
Codul:
Un prieten m-a sfătuit să folosesc un program de dezmembrare și este doar o buclă (de exemplu, buclă „pentru”) pentru a face programul să ia ceva timp pentru a alege o citire, înseamnă că face o mulțime de citiri (500 în examenul meu), dar doar ultima.
pentru (i = 1; i <= 500; i ++) {// luați doar a 500-a lectură analogică
value = analogRead (Buton);} // este un ajutor pentru a lua ceva timp și pentru a evita citirile proaste
Un alt prieten, mulțumit lui, m-a sfătuit să compar „readvalue” cu o serie de valori, nu una, deoarece „readvalue” ia o mulțime de valori pentru același buton. 851 852, 853, 854, 855 deci este un interval de 7 valori: un prag (852) și 3 valori la stânga și la dreapta. ceea ce trebuie să facem aici este să comparăm valoarea absolută a diferenței dintre „readvalue” și „852” cu „3”.
if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}
Pasul 6: După câteva lucrări de soldare
Pasul 7: Momentul Adevărului
După cum puteți vedea, programul confundă uneori butoanele, dar funcționează în continuare, în teorie nu este nimic în neregulă cu circuitul, dar codul are nevoie de mai multe calibrări.
Pasul 8: Sfârșitul
Sper să vă placă acest proiect și să încercați să îl faceți, poate că veți face mai bine decât mie.
Întrebați-mă dacă aveți întrebări, lăsați comentarii și, nu uitați să mă votați dacă vă place asta.