Мазмуну:

Plug and Play аркада баскычтары: 7 кадам (сүрөттөр менен)
Plug and Play аркада баскычтары: 7 кадам (сүрөттөр менен)

Video: Plug and Play аркада баскычтары: 7 кадам (сүрөттөр менен)

Video: Plug and Play аркада баскычтары: 7 кадам (сүрөттөр менен)
Video: Мыктынын мыктысы???. Радио приемник TECSUN PL680 FULL REVIEW!!! #tecsun 2024, Ноябрь
Anonim
Plug and Play Аркада баскычтары
Plug and Play Аркада баскычтары

Мен жакында долбоорлорумду түзүү үчүн Arduino колдоно баштадым. Дизайнер катары мен оюндарыма/интерактивдүү долбоорлорго ыңгайлаштырылган интерфейстерди жасоону жакшы көрөм.

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

Мен каалаган компьютер менен заматта колдонула турган сайгычты жана ойноткучту каалагандыктан, мен Arduino Leonardo сатып алдым. Бул Uno менен дээрлик окшош, бирок бир аз айырмачылыктар менен. Бул долбоор үчүн менин артыкчылыгымды колдоно турган негизги айырмачылык - бул HID катары иштөө жөндөмдүүлүгү. HID же адам интерфейси түзмөгү - бул USB протоколу, ал сиздин компьютериңизге ар бир түзмөк үчүн ыңгайлаштырылган драйверлерди орнотпостон, клавиатурадан жана компьютердин чычканынан кирүүнү таанууга жана кабыл алууга мүмкүндүк берет.

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

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

Бул долбоор үчүн сизге керек болот:

1x HID жөндөмдүү микроконтроллер (Arduino micro, Due & leonardo сыяктуу бир нече бар, мен Arduino Leonardo колдоном)

1x USB arduino кабелине (Леонардо үчүн бул USB микро)

3x Аркада баскычтары (мен муну сатып алдым)

1x solderless нан

3x 10k ohm резисторлору

3x 220 Ом резисторлор

Өткөргүч зымдар

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

2 -кадам: Прототиптөө

Прототиптөө
Прототиптөө
Прототиптөө
Прототиптөө
Прототиптөө
Прототиптөө

Ошентип, мен колдонгум келген аркада баскычтарын сатып алардан мурун муну стандарттык баскычтар менен сынап көрдүм. Кнопкаларды стандарттык жол менен тартыңыз, мен 10K ом резисторлорун колдондум деп ойлойм.

Леонардонун жардамы менен программалоо абдан жөнөкөй. Сиз клавиатура китепканасын кошушуңуз керек. Мен кодумдун негизи катары Arduino "Keyboard message" стандарттуу мисалын колдондум.

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

Эгерде сиз секирүү же күйгүзүү/өчүрүү сыяктуу баскыч басылса, анда бир нерсенин мисалынын болушун кааласаңыз, анда сиз бир түртүү ыкмасын тандайсыз. Бул ыкма менен сиз баскычтын абалын карайсыз, ал өйдөбү же ылдыйбы? Андан кийин мурунку абалга салыштырып көрүңүз, ал мурунтан эле өйдө же ылдый беле? Эгерде мурунку баскычтын абалы учурдагы баскычтын абалы менен бирдей болсо, анда эч нерсе болбойт. Бирок баскычтын абалы өзгөрсө, сиз баскычты баскандай же коё берсеңиз, бир нерсе болот. Менин кодумда ал тамга баскыч басылганда гана жазылат, бошотулганда эмес, бирок сиз муну өзгөртө аласыз.

#"Keyboard.h" кошуу

const int buttonLeft = A0; // баскыч үчүн кирүүчү пин

const int buttonRight = A1; const int buttonUp = A2;

int previousButtonStateLeft = HIGH; // баскычтын абалын текшерүү үчүн

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

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

// pushButton пинди киргизүү: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // клавиатура үстүнөн башкарууну инициализациялоо: Keyboard.begin (); }

void loop () {

// баскычын окуу: int buttonStateLeft = digitalRead (buttonLeft); // эгерде баскычтын абалы өзгөрсө, анда ((buttonStateLeft! = previousButtonStateLeft) // жана ал учурда басылып турат: && (buttonStateLeft == HIGH)) {// билдирүүнү териңиз Keyboard.print ("a"); } // кийинки баскычтын абалын кийинки жолу салыштыруу үчүн сактаңыз: previousButtonStateLeft = buttonStateLeft;

// баскычын окуңуз:

int buttonStateRight = digitalRead (buttonRight); // эгерде баскычтын абалы өзгөрсө, анда ((buttonStateRight! = previousButtonStateRight) // жана ал учурда басылып турат: && (buttonStateRight == HIGH)) {// билдирүүнү териңиз Keyboard.print ("w"); } // кийинки баскычтын абалын кийинки жолу салыштыруу үчүн сактаңыз: previousButtonStateRight = buttonStateRight;

// баскычын окуңуз:

int buttonStateUp = digitalRead (buttonUp); // эгерде баскычтын абалы өзгөрсө, анда ((buttonStateUp! = previousButtonStateUp) // жана ал учурда басылып турат: && (buttonStateUp == HIGH)) {// билдирүүнү териңиз Keyboard.print ("d"); } // учурдагы баскычтын абалын кийинки жолу салыштыруу үчүн сактаңыз: previousButtonStateUp = buttonStateUp; }

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

#"Keyboard.h" кошуу

const int buttonLeft = A0; // баскыч үчүн кирүүчү пин

const int buttonRight = A1; const int buttonUp = A2;

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

// pushButton пинди киргизүү: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // клавиатура үстүнөн башкарууну инициализациялоо: Keyboard.begin (); }

void loop () {

// баскычын окуу: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // баскыч басылса {// билдирүүнү териңиз Keyboard.print ("a"); кечиктирүү (50); // Секирүү жана компьютерге жетүү үчүн кечигүү}

// баскычын окуу:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // эгер баскыч басылса {// билдирүүнү териңиз Keyboard.print ("w"); кечиктирүү (50); // Секирүү жана компьютерди кармап калуу үчүн кечигүү}

// баскычын окуңуз:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // баскыч басылса {// билдирүүнү териңиз Keyboard.print ("d"); кечиктирүү (50); // Секирүү жана компьютерди кармап калуу үчүн кечигүү}}

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

3 -кадам: ишти лазер менен кесүү

Корпусту лазер менен кесүү
Корпусту лазер менен кесүү

Иш үчүн мен 3 мм mdf, 2 мм плексиглас кыстармасы менен колдондум. Кийинки этапта корпустун ичине кээ бир светодиоддорду кошуп, жакшы жана жаркыраган кылуу үчүн, мен кошумчаны коштум.

Мен өлчөмдөрүмдү чоңойтуп киргизип, svg файлын жүктөп алдым. Мен аны Illustratorдо ачып, тешиктерди каалаган жериме кошуп койдум. Эгерде Illustrator жок болсо, анда бул кадам үчүн Inkscape колдонсоңуз болот.

Албетте, лазер кескичти колдонуунун кажети жок, анткени бул бир нече тешиги бар жөнөкөй куту. Аны салттуу электр шаймандарын колдонуу менен түзүү оңой болушу керек (же ал тургай кол куралдары!) Мен абдан жалкоомун жана лазер кескичке мүмкүнчүлүгүм бар болчу.

4 -кадам: Аркада баскычтарын ширетүү

Аркада баскычтарын ширетүү
Аркада баскычтарын ширетүү
Аркада баскычтарын ширетүү
Аркада баскычтарын ширетүү
Аркада баскычтарын ширетүү
Аркада баскычтарын ширетүү

Аркада баскычы (же меники дегенде) үч бөлүктөн турат. Пластикалык корпус, LED кармагыч (ичинде LED бар) жана микро которгуч. Микро коммутатор - бул баскычтын чыныгы баскычы бөлүгү жана сиз Arduino менен туташуу үчүн керек болот. Микро которгучта үч терминал бар (металл биттер, алар зымдарды эритип коёсуз). Үстүндө (же ылдыйда, сиз эмнени кааласаңыз) - жер. Башка эки терминалдар кадимки ачык (NO) жана кадимки жабык (NC). NO которгуч басылганда ал байланышты түзөт дегенди билдирет. NC бул баскыч басылса, ал байланышты үзөт дегенди билдирет. Биз бул долбоор үчүн NO колдонобуз. Мен сүрөттөрдү микро өчүргүчкө жерге, NO жана NC деп белгилеп койдум.

Менин баскычтарым жарык болгондуктан, зымдарды LED кармагычка коштум. Кайсы жагы анод, кайсынысы катод экенин (LEDдин оң жана терс жактары) билүү үчүн зымдарыңызды түстүү код менен жазыңыз.

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

5 -кадам: Түймөлөрдү жыйыштырып, аларды тактаңызга туташтырыңыз

Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз
Түймөлөрдү чогултуп, аларды тактаңызга туташтырыңыз

Эми аркада баскычтарын өз ишиңизге жыйыштырууга убакыт келди. Пластикалык корпустан кулпу шакегин алып салыңыз жана аны корпустун тешигинен өткөрүңүз. Кнопканы ордуна бекитүү үчүн, бекитүүчү шакекти башка тарапка сайыңыз. LED кармагычты жабыштырып, аны бекитүү үчүн бураңыз. Микро өчүргүчтөрдө чайкаңыз (кичине тентектер жана тешиктер бар, алар аны кармап туруу үчүн бири -бирине дал келет).

Коммутаторлорду тактага туташтыруу үчүн сиз кошкон же кошпогон баскычтарды алып салыңыз. Микро коммутатордун жеринен чыккан зымды Arduino менен резистордун жерге туташтырыңыз (баскычтын буту турган жерде). Микро өчүргүчтүн NO'унан чыккан зымды Arduino 5vге туташтырыңыз.

LED зымдары үчүн терс зымды жерге жана оңго 220OHM каршылыгы аркылуу 5v менен туташтырыңыз. Эгер сиз аларды ушинтип зым менен тартсаңыз, алар дайыма күйүп турат. Сиз аларды кодго кошуп, кааласаңыз, аларды баскычтар менен шайкештештирип күйгүзүп же өчүрө аласыз.

6 -кадам: Тозокту коддоо

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

Биринчи нерсе биринчи. Прототипдөө учурунда биз жазган код? ал жакшы иштейт жана жөнөкөй, бирок ал жарашыктуу эмес. Эгерде сиз дагы баскычтарды кошкуңуз келсе, анда коддун үзүндүлөрүн көчүрүү жана чаптоо жана алардын ичиндеги бардык баалуулуктарды өзгөртүү керек. Эгер сиз алардын бирин унутуп калсаңыз, каталарды оңдоочу тозокко киресиз. Бул жерден тема табылсынбы? Коддоо - бул тозок, бирок тозокту чечүү абдан кызыктуу.

Биз сулуу, кыска кодду каалайбыз. Ошентип, биз жеке баскычтын бүтүн сандарын массивдерге алмаштырабыз. Ошентип, эгер сиз дагы кнопкаларды кошкуңуз келсе, анда баскычтын суммасын, алар жайгашкан казыктарды жана алардын чыгымдарын гана өзгөртүү керек. Биз ошондой эле ачкычтарды ASCIIге алмаштырабыз, анткени ал жакшы иштейт?

Эми сиз мага окшош болсоңуз, сиз баскычтарды колдонуунун жөнөкөй жана оңой жолун жазасыз жана ал сиз каалагандай иштебейт. Ошентип, сиз жаңы версияларды түзөсүз (балдарды эстеп, кошумча резервдик көчүрмөлөрдү эстеңиз!), Ар кандай нерселерди сынап көрүңүз, дайыма татаал кодду жазыңыз, ал дагы деле жакшы иштебейт жана акыры бир нече саат мурун жазган жөнөкөй кодго кайтып келип, кичинекей катаны байкаңыз. заматта баарын оңдойт.

Мен сизге ошол саякатты аябоого уруксат бериңиз, бул жерде иштөө коду:

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

#"Keyboard.h" кошуу#баскычын аныктооСумма 3

int buttonPin = {

A0, A1, A2}; // Кнопкалар кайда? int asciiLetter = {97, 100, 119}; // ASCIIдеги каттар, бул жерде: a, d, w int buttonState [buttonAmount]; // Баскыч басылдыбы же жокпу?

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

for (int i = 0; i <buttonAmount; i ++) {// pinMode массивинде цикл (buttonPin , INPUT); // бардык казыктарды киргизүүгө коюу}}

void loop () {

үчүн (int i = 0; i <buttonAmount; i ++) // цикли {buttonState = digitalRead (buttonPin ) массиви аркылуу өтөт; // Кнопкалар эмне кылып жатышат? if (buttonState == HIGH) {// Эгерде баскыч басылса Keyboard.press (asciiLetter ); // тиешелүү катты жөнөтүү} башка // эгерде баскыч басылбаса {Keyboard.release (asciiLetter ); // катты бошотуу}}

}

7 -кадам: Баары иштейт

Плагинден ырахат алыңыз жана ыңгайлаштырылган контроллерди ойноңуз!

Эгер сизге бул көрсөтмө жаккан болсо, анда мага конкурста добуш берүүнү ойлонуп көрүңүз!

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