Мазмуну:

Бир пин 4 × 4 баскычтоп: 10 кадам
Бир пин 4 × 4 баскычтоп: 10 кадам

Video: Бир пин 4 × 4 баскычтоп: 10 кадам

Video: Бир пин 4 × 4 баскычтоп: 10 кадам
Video: КАК НАСТРОИТЬ L4D2 2024, Ноябрь
Anonim
Бир пин 4 × 4 баскычтоп
Бир пин 4 × 4 баскычтоп

Мен баскычтопту көргөн сайын, ал көптөгөн казыктар менен коштолот, бул сиздин Arduino төөнөгүчтөрүңүздүн чоң калдыктары, ошондуктан биз бир жана бир гана пин менен баскычтопту иштете алабызбы?. Жооп бул жерде.

1 -кадам: Билл материалдар

Билл материалдар
Билл материалдар

Аппараттык:

01 Arduino UNO

02 Breadboards

01 LCD I2C менен

16 баскычтар

04 каршылыгы 1,5 кОм

04 каршылыгы 620 Ω

04 каршылыгы 220 Ω

08 каршылыгы 100 Ω

01 каршылык 1 кОм

07 Өтмө зымдар

Программалык камсыздоо:

Сиздин компьютериңизге Arduino IDE орнотулган

2 -кадам: Схемалык жана цикрут

Схемалык жана циклит
Схемалык жана циклит
Схемалык жана циклит
Схемалык жана циклит

Бардык идея бизде Жерге тигинен туура коргошун менен тигинен туташкан 4*4 матрицасы жана горизонталдуу башка коргошун (топчу коргошуну) жана 1.5 кОм, 620Ω, 220Ω жана 100Ω каршылыгы менен бар. 4 катар схемада көрсөтүлгөндөй төрт 100Ω каршылыгы менен туташкан.

Сиз баскычты баскан сайын, сиз схеманы жаап саласыз жана ток башка жолдон жана ар кандай резисторлор чынжырынан өтөт, ошондуктан A0 пини ар бир баскыч үчүн башка аналогду окуйт. Азыр сизге керектүү нерсенин баары коддоо.

3 -кадам: Кодекс

#кошуу

#кошуу

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Button = A0;

int readvalue;

жараксыз орнотуу ()

{

Serial.begin (9600);

lcd.begin ();

pinMode (Баскыч, INPUT);

lcd.backlight ();

lcd.print ("Hello World");

кечигүү (2000);

lcd.clear ();

lcd.print ("Бир пин 4*4 баскычтоп");

кечигүү (2000); }

боштук цикл ()

{

readvalue = analogRead (Button);

Serial.println (readvalue);

if (readvalue == 852) {lcd.clear (); lcd.print ("A");}

else {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}

башка {эгер (readvalue == 685) {lcd.clear (); lcd.print ("C");}

башка {эгер (readvalue == 965) {lcd.clear (); lcd.print ("D");}

башка {эгер (readvalue == 565) {lcd.clear (); lcd.print ("9");}

башка {эгер (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");}

башка {эгер (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 {}}}}}}}}}}}}}}}}

4 -кадам: баалуулуктарды оңдоо

Баалуулуктарды тууралоо
Баалуулуктарды тууралоо

Сериялык мониторду ачканыңызда, ал 1023 маанисин көрсөтөт, эгер сиз баскычты бассаңыз, ал сизге башка окууну берет, сиз ошол баалуулуктарды алып, кодго айрым өзгөртүүлөрдү киргизишиңиз керек.

5 -кадам: Сын жана кароодон кийин долбоор

Сын жана кароодон кийин долбоор
Сын жана кароодон кийин долбоор

Баарыбыз бул жерде билимибизди үйрөнүү жана бөлүшүү үчүн келгенибизге эч кандай шек жок, коомчулуктун кээ бир адамдарынын абдан пайдалуу болгон комментарийлеринин аркасында мен долбоорума бир аз түзөтүүлөрдү жана жакшыртууларды киргизүүнү чечтим:

Аппаратура:

Нан такталарында начар туташуу көйгөйүн болтурбоо үчүн, мен бардык компоненттерди ПХБда ширетүүнү чечтим.

Код:

Бир досум мага программалык камсыздоону колдонууну сунуштады жана бул жөн гана цикл (мисалы, "for" цикли), программаны окуу үчүн бир аз убакыт талап кылынат, бул көп окууну түзөт (менин экзаменимде 500), бирок акыркы гана.

for (i = 1; i <= 500; i ++) {// 500 -аналогдук окууну гана алыңыз

value = analogRead (Button);} // бул жаман окуулардан качууга бир аз убакыт бөлүүгө жардам берет

Анын жардамы менен башка бир досум мага "readvalue" дегенди бир эмес, бир катар диапазон менен салыштырууну сунуштады, анткени "readvalue" бир эле баскыч үчүн көптөгөн баалуулуктарды алат. Мисалы, "А" окууну берет: 849, 850, 851 852, 853, 854, 855 Ошентип, бул 7 маанинин диапазону: босого (852) жана 3 маанилер солго жана оңго. биз бул жерде эмне кылышыбыз керек "readvalue" менен "852" ортосундагы айырмачылыктын абсолюттук маанисин "3" менен салыштыруу.

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

6 -кадам: Кээ бир сатуу жумуштарынан кийин

Кээ бир сатуу жумуштарынан кийин
Кээ бир сатуу жумуштарынан кийин
Кээ бир сатуу жумуштарынан кийин
Кээ бир сатуу жумуштарынан кийин
Кээ бир сатуу жумуштарынан кийин
Кээ бир сатуу жумуштарынан кийин

7 -кадам: Чындыктын учуру

Көрүнүп тургандай, программа кээде баскычтарды чаташтырат, бирок ал дагы деле иштейт, теория боюнча схемада эч кандай ката жок, бирок код көбүрөөк калибрлөөнү талап кылат.

8 -кадам: Акыры

Бул долбоор сизге жагат деп үмүттөнөм жана сиз муну жасоого аракет кыласыз, балким менден жакшыраак иш кыларсыз.

Суроолоруңуз болсо менден сураңыз, комментарий калтырыңыз жана эгер сизге жакса мага добуш берүүнү унутпаңыз.

Сунушталууда: