Cuprins:

Tastatură cu un pin 4 × 4: 10 pași
Tastatură cu un pin 4 × 4: 10 pași

Video: Tastatură cu un pin 4 × 4: 10 pași

Video: Tastatură cu un pin 4 × 4: 10 pași
Video: 32 de combinații secrete pe tastatura ta 2024, Noiembrie
Anonim
Tastatură cu un pin 4 × 4
Tastatură cu un pin 4 × 4

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

Proiect de lege de materiale
Proiect de lege de materiale

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

Schematic și Cicruit
Schematic și Cicruit
Schematic și Cicruit
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

Corectarea valorilor
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

Proiect după critică și recenzie
Proiect după critică și recenzie

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

După câteva lucrări soldring
După câteva lucrări soldring
După câteva lucrări soldring
După câteva lucrări soldring
După câteva lucrări soldring
După câteva lucrări soldring

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.

Recomandat: