Mundarija:

Arja tugmachalarini ulash va ishlatish: 7 qadam (rasmlar bilan)
Arja tugmachalarini ulash va ishlatish: 7 qadam (rasmlar bilan)

Video: Arja tugmachalarini ulash va ishlatish: 7 qadam (rasmlar bilan)

Video: Arja tugmachalarini ulash va ishlatish: 7 qadam (rasmlar bilan)
Video: Yashirin xona topildi! - Frantsiyadagi 12-asrga oid butunlay buzilmagan tashlab ketilgan Qal'a 2024, Noyabr
Anonim
Arja tugmachalarini ulash va ishlatish
Arja tugmachalarini ulash va ishlatish

Men yaqinda o'z loyihalarimni amalga oshirish uchun Arduino -dan foydalana boshladim. Dizayner sifatida men o'yinlarim/interaktiv loyihalarim uchun maxsus interfeyslarni yaratishni yaxshi ko'raman.

Men duch kelgan bitta muammo shundaki, ketma -ket aloqadan foydalanish juda murakkab va muammolarga va xatolarga moyil, shuning uchun men o'z o'yinlarimni boshqarish uchun tashqi tugmalardan foydalanishimga imkon beradigan tez va oson echimni xohlardim.

Men istalgan kompyuterda bir zumda ishlata oladigan ulanish moslamasini xohlardim, men Arduino Leonardoni sotib oldim. Bu deyarli Uno bilan bir xil, lekin bir nechta farqlar bilan. Men bu loyihani o'z foydamga ishlatadigan asosiy farq - bu HID sifatida harakat qilish qobiliyati. HID yoki inson interfeysi qurilmasi - bu har bir qurilma uchun maxsus drayverlarni o'rnatmasdan kompyuteringizga klaviatura va sichqonchadan kirishni aniqlash va qabul qilish imkonini beruvchi USB protokoli.

Eslatma: agar siz dasturiy ta'minotni bu erda ko'rsatilganidek yangilasangiz, Uno -dan ham foydalanishingiz mumkin.

1 -qadam: materiallar

Ushbu loyiha uchun sizga kerak bo'ladi:

1 ta HID qobiliyatli mikrokontroller (Arduino micro, Due & Leonardo kabi bir nechtasi bor, men Arduino Leonardodan foydalanaman)

1 x USB - arduino kabeli (Leonardo uchun bu USB mikro)

3x Arja tugmalari (men ularni sotib oldim)

1x lehimsiz non paneli

3x 10k ohmli rezistorlar

3x 220 ohmli rezistorlar

Jumper simlari

Siz, albatta, ko'proq tugmachalarni qo'shishingiz yoki hamma narsani non paneliga lehimlashingiz mumkin, bu esa ishni yanada barqaror qiladi.

2 -qadam: prototip yaratish

Prototip yaratish
Prototip yaratish
Prototip yaratish
Prototip yaratish
Prototip yaratish
Prototip yaratish

Shunday qilib, men foydalanmoqchi bo'lgan arja tugmachalarini sotib olishdan oldin men buni standart tugmalar yordamida sinab ko'rdim. Tugmalarni standart usulda ulang, menimcha, 10K ohmli rezistorlar ishlatilgan.

Leonardo tufayli dasturlash juda oddiy. Siz klaviatura kutubxonasini kiritishingiz kerak. Men kodim uchun asos sifatida "Klaviatura xabari" Arduino standart misolini ishlatdim.

Endi savol tugmachalarning qanday ishlashini xohlaysiz. Sizda asosan ikkita tanlov bor: bitta tugmani bosish va agar bosilsa harflarning uzluksiz oqimi. Bu, albatta, siz xohlagan narsani loyihangizga bog'liq.

Agar siz biror narsani bosishni xohlasangiz, masalan, o'tish yoki yoqish/o'chirish tugmachasi bosilsa, siz bitta bosish usulini tanlaysiz. Ushbu usul yordamida siz tugma holatiga qaraysiz, u yuqorimi yoki pastga? Keyin siz uni oldingi holat bilan solishtirasiz, u allaqachon yuqorimi yoki pastmi? Agar oldingi tugma holati hozirgi tugma holati bilan bir xil bo'lsa, hech narsa bo'lmaydi. Ammo agar tugma holati o'zgarsa, xuddi siz tugmani bosganingizda yoki bo'shatganingizda, nimadir bo'ladi. Mening kodimda u faqat tugma bosilganda harfni yozadi, qo'yib yuborilganda emas, lekin siz buni o'zgartirishingiz mumkin.

#"Keyboard.h" ni qo'shing

const int buttonLeft = A0; // tugma uchun kirish pimi

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

int oldingiButtonStateLeft = YUQORI; // tugma holatini tekshirish uchun

int oldingiButtonStateRight = YUQORI; int previousButtonStateUp = HIGH;

bo'sh o'rnatish () {

// pushButton pinini kirishga aylantiring: pinMode (buttonLeft, INPUT); pinMode (tugmachaning o'ng, kirish); pinMod (tugmani yuklash, Kirish); // klaviatura ustidan boshqaruvni ishga tushirish: Keyboard.begin (); }

void loop () {

// tugmachani o'qing: int buttonStateLeft = digitalRead (buttonLeft); // agar tugma holati o'zgargan bo'lsa, agar ((buttonStateLeft! = previousButtonStateLeft) // va hozirda u bosilgan bo'lsa: && (buttonStateLeft == HIGH)) {// xabar yozing Keyboard.print ("a"); } // keyingi tugma holatini keyingi taqqoslash uchun saqlang: previousButtonStateLeft = buttonStateLeft;

// tugmachani o'qing:

int buttonStateRight = digitalRead (buttonRight); // agar tugma holati o'zgargan bo'lsa, ((buttonStateRight! = previousButtonStateRight) // va hozirda u bosilgan: && (buttonStateRight == HIGH)) {// xabarni yozing Keyboard.print ("w"); } // keyingi tugma holatini keyingi taqqoslash uchun saqlang: previousButtonStateRight = buttonStateRight;

// tugmachani o'qing:

int buttonStateUp = digitalRead (buttonUp); // agar tugma holati o'zgargan bo'lsa, agar ((buttonStateUp! = previousButtonStateUp) // va hozirda u bosilgan bo'lsa: && (buttonStateUp == HIGH)) {// xabar yozing Keyboard.print ("d"); } // keyingi tugma holatini keyingi taqqoslash uchun saqlang: previousButtonStateUp = buttonStateUp; }

Agar siz biror narsa doimiy ravishda sodir bo'lishini xohlasangiz, tugma bosilganda, siz xohlaganingizcha, chap yoki o'ng harakatni xohlasangiz, oldingi tugma holatini tekshirmasdan xat yozishiga ruxsat bering. Aqldan ozishining oldini olish va tugmachalarning sakrashiga qarshi turish uchun biroz kechiktirishni unutmang. Bu muammoni hal qilishning yanada oqilona usullari bor, lekin bu oson va tez.

#"Keyboard.h" ni qo'shing

const int buttonLeft = A0; // tugma uchun kirish pimi

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

bo'sh o'rnatish () {

// pushButton pinini kirishga aylantiring: pinMode (buttonLeft, INPUT); pinMode (tugmachaning o'ng, kirish); pinMode (tugmani yuklash, kiritish); // klaviatura ustidan nazoratni boshlash: Keyboard.begin (); }

void loop () {

// tugmachani o'qing: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // agar tugma bosilsa {// xabarni yozing Keyboard.print ("a"); kechikish (50); // Siqish va kompyuterni ushlab qolish uchun kechikish}

// tugmachani o'qing:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // agar tugma bosilsa {// xabarni yozing Keyboard.print ("w"); kechikish (50); // Siqish va kompyuterni ushlab qolish uchun kechikish}

// tugmachani o'qing:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // agar tugma bosilsa {// xabar yozing Keyboard.print ("d"); kechikish (50); // Siqilish va kompyuterni ushlab qolish uchun kechikish}}

Sizning ehtiyojlaringizga eng mos kelishiga qarab, har doim ikkala usuldan ham foydalanishingiz mumkin.

3 -qadam: Kosonni lazer bilan kesish

Kosonni lazer bilan kesish
Kosonni lazer bilan kesish

Ish uchun men 2 mm pleksiglas qo'shimchali 3 mm mdf ishlatganman. Men qo'shimchani qo'shdim, chunki keyingi bosqichda korpusning ichki qismiga bir nechta LEDlarni qo'shib, uni chiroyli va yorqin qilishini xohlayman.

Men o'z o'lchamimni kiritdim va svg faylini yukladim. Men uni Illustrator -da ochdim va kerakli teshiklarni qo'shdim. Agar sizda Illustrator bo'lmasa, bu qadam uchun Inkscape -dan foydalanishingiz mumkin.

Albatta, lazerli kesgichni ishlatishning hojati yo'q, chunki bu bir nechta teshiklari bo'lgan oddiy quti. An'anaviy elektr asboblari (yoki hatto qo'lda ishlaydigan asboblar) yordamida uni yaratish juda oson bo'lishi kerak, men juda dangasa va lazerli kesgichga ega bo'ldim.

4 -qadam: Arja tugmachalarini lehimlash

Arja tugmachalarini lehimlash
Arja tugmachalarini lehimlash
Arja tugmachalarini lehimlash
Arja tugmachalarini lehimlash
Arja tugmachalarini lehimlash
Arja tugmachalarini lehimlash

Arja tugmasi (yoki hech bo'lmaganda meniki) uch qismdan iborat. Plastik korpus, LED ushlagichi (uning ichida LED bilan) va mikro kalit. Mikro kalit - bu tugmachaning haqiqiy tugmasi va siz Arduino -ga ulanish uchun kerak bo'ladi. Mikro kalitda uchta terminal bor (ular metall simlar, siz simlaringizni lehimlaysiz). Yuqorida (yoki pastda, siz xohlagan narsa) - bu er. Boshqa ikkita terminal - Oddiy Ochiq (YO'Q) va Oddiy Yopiq (NC). YO'Q degani, agar tugma bosilsa, u ulanadi. NC degani, agar tugma bosilsa, u aloqani uzadi. Biz ushbu loyiha uchun NO ni ishlatamiz. Men rasmda mikro kalitimga erni, NO va NC ni belgiladim.

Mening tugmalarim yoritilgan, shuning uchun men LED ushlagichiga simlarni lehimladim. Anodning qaysi tomoni va qaysi katod (LEDning ijobiy va salbiy tomonlari) ekanligini bilish uchun simlar rangini belgilang.

Lehimsiz non taxtasi bilan ishlashni osonlashtirish uchun men simlarimga bosh pinlarini lehimladim. Men shunchaki simni bosh piniga lehimlab qo'ydim va ularni yanada chidamli qilish uchun atrofiga ozgina issiqlik o'tkazuvchi trubka qo'ydim.

5 -qadam: tugmachalarni yig'ing va ularni taxtangizga ulang

Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang
Tugmalarni yig'ing va ularni taxtangizga ulang

Endi sizning holatingizda arja tugmachalarini to'plash vaqti keldi. Plastik korpusdan qulflash halqasini chiqarib oling va uni korpus teshigidan mahkamlang. Tugmani joyiga mahkamlash uchun qulflash halqasini boshqa tomondan mahkamlang. LED ushlagichini mahkamlang va mahkamlang. Mikro kalitlarda qimirlatib turing (uni ushlab turish uchun bir -biriga mos keladigan kichik zodagonlar va teshiklar bor).

Kalitlarni taxtaga ulash uchun siz qo'shgan yoki qo'shmagan tugmachalarni olib tashlang. Mikro kalitning eridan keladigan simni Arduino va rezistorning eriga ulang (bu erda tugmachaning oyog'i joylashgan). Mikro kalitning NO -dan keladigan simni Arduino -ning 5v -ga ulang.

LED simlari uchun manfiy simni erga va musbatni 220V qarshilik bilan 5V ga ulang. Agar siz ularni shunday bog'lasangiz, ular doimo yonib turadi. Agar xohlasangiz, ularni kodga qo'shishingiz va tugmalar bilan sinxronlashda yoqishingiz va o'chirishingiz mumkin.

6 -qadam: Jahannamni kodlash

Shunday qilib, endi siz o'zingizning yangi tugmalaringizni eski kodingizga biriktirdingiz va birdan u endi kerak bo'lmaganday ishlamayapti. Harflar birdaniga ikki yoki uchtadan paydo bo'ladi va u oddiy HTML5 o'yinlarida bo'lgani kabi ishlamaydi. Jahannamdan voz kechishga xush kelibsiz.

Birinchi narsa birinchi. Prototiplash paytida biz yozgan kod? u yaxshi ishlaydi va oddiy, lekin u nafis emas. Agar siz boshqa tugmachalarni qo'shmoqchi bo'lsangiz, kod parchalarini nusxalash va joylashtirish va undagi barcha qiymatlarni o'zgartirish kerak. Agar siz ulardan birini unutib qo'ysangiz, xato tuzatish do'zaxiga kirasiz. Bu yerda mavzu aniqlansinmi? Kodlash - bu do'zax, lekin do'zaxni hal qilish juda kulgili.

Biz chiroyli, qisqa kodni xohlaymiz. Shunday qilib, biz butun individual tugmachalarni massivlarga o'zgartiramiz. Shunday qilib, agar siz ko'proq tugmachalarni qo'shmoqchi bo'lsangiz, siz faqat tugma miqdorini, ular joylashgan pinlarni va ularning chiqishini o'zgartirishingiz kerak. Biz shuningdek, asosiy kirishni ASCII ga o'zgartiramiz, chunki … u yaxshiroq ishlaydi?

Agar siz menga o'xshagan bo'lsangiz, tugmalarni ishlatishning oddiy va oson usulini yozasiz va u siz xohlagandek ishlamaydi. Shunday qilib, siz yangi versiyalarni yaratasiz (bolalarni eslang, zaxira nusxalarini eslang!), Har xil narsalarni sinab ko'ring, doimo ishlamaydigan murakkab kodni yozing va oxir-oqibat bir necha soat oldin yozgan oddiy kodingizga qayting va kichik xatoga e'tibor bering. hamma narsani darhol tuzatadi.

Sizga bu sayohatni qoldirishga ijozat bering, mana bu ish kodi:

Ogohlantirish: bu matn bir necha soatlik kodlash va xatolarni tuzatgandan so'ng yozilgan. Iltimos, umidsizlik belgilariga e'tibor bermang va quyida keltirilgan ish kodiga e'tibor bering;)

#"Keyboard.h" ni qo'shish

int tugmachasi = {

A0, A1, A2}; // Tugmalar qayerda? int asciiLetter = {97, 100, 119}; // ASCII -dagi harflar, bu erda: a, d, w int tugmasiState [buttonAmount]; // Tugma bosiladimi yoki bosilmayaptimi?

bo'sh o'rnatish () {

for (int i = 0; i <buttonAmount; i ++) {// pinMode qatori orqali o'tish (buttonPin , INPUT); // barcha pinlarni kiritishga sozlang}}

void loop () {

for (int i = 0; i <buttonAmount; i ++) // {buttonState = digitalRead (buttonPin ) qatori orqali aylanish; // Tugmalar nima qiladi? if (buttonState == HIGH) {// Agar tugma bosilsa Keyboard.press (asciiLetter ); // tegishli xatni yuborish} else // agar tugma bosilmasa {Keyboard.release (asciiLetter ); // xatni qo'yib yuboring}}

}

7 -qadam: Hammasi ishlaydi

Maxsus boshqaruvchini ulang va o'ynang!

Agar sizga bu ko'rsatma yoqqan bo'lsa, iltimos, tanlovda menga ovoz bering!

Tavsiya: