Mundarija:

Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]: 4 qadam
Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]: 4 qadam

Video: Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]: 4 qadam

Video: Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]: 4 qadam
Video: BİR O'ZİNGİZ KO'RİNG / DUNYODAGİ ENG G'ALATİ ER-XOTİNLAR / Buni Bilasizmi? 2024, Iyul
Anonim
Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]
Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]

Oxirgi marta men Photoshop -da ishlatish uchun kichik boshqaruv panelini yaratdim. Bu mo''jizalar yaratdi va men hali ham foydalanaman! Ammo bu juda cheklangan, atigi beshta tugma va foydali o'lcham va shaffof terish. Men hali ham klaviaturaga juda ko'p intilayotganimni ko'rdim …

Shunday qilib, men boshqaruv panelining keyingi iteratsiyasi ustida ishlay boshladim, bittasi tugmachalari va funksionalligi bilan. Hammasini boshqarish uchun bitta boshqaruv paneli.

Bu boshqaruv paneli emas. Lekin qandaydir tarzda yaxshiroq bo'lishi mumkin.

Agar sizda juda ko'p yorliqlar bo'lishi mumkin bo'lsa -chi, lekin o'ta qulay va engil to'plamda siz uzluksiz rasm chizayotganda bo'sh qo'lingiz bilan ushlab tura olasizmi? … OK, infomercial bilan etarli.

Bu nazoratchi shunday dasturlashtirilganki, atigi 4 tugma yordamida uni 32 tagacha mumkin bo'lgan yorliqlar bilan bog'lash mumkin! Qo'shimcha 5-tugma, har qanday kombinatsiyada o'zgartiruvchi tugmachalardan foydalanishimga imkon beradi, bu ko'p dasturlar uchun foydalidir (siz hech qachon PS-da Alt-RMB kombinatsiyasini sinab ko'rdingizmi? Agar yo'q bo'lsa, iltimos, bajaring. Bu qutqaruvchi). Men tizimni keyinroq tushuntiraman.

Bularning barchasini bajarish uchun sizga kerak bo'ladi:

  • 1 Mikrokontroller (men Adafruit ItsyBitsy 32u4 dan foydalanardim, lekin har kim atmega32u4 chipiga ega bo'lsa, shunday qilishi kerak)
  • 1 ta micro-USB adapteri (ma'lumotlar faqat quvvat uchun emas)
  • 5 ta tugma (men yumshoq tugmachalarni ishlatardim)
  • 10k Ohmli rezistorlar (har bir tugma uchun 1 dona)
  • Simlar, non paneli, lehim materiallari va boshqalar.
  • Koson qilish uchun biror narsa (3D printer va boshqalar)

Bu o'rta darajadagi Arduino loyihasi va men nima bo'layotganini yaxshiroq tushunish uchun o'tgan darsligimni ko'rib chiqishni taklif qilaman, chunki bu erda men tushuntirgan narsalarimning takrorlanishi ko'p.

OK, boshlaylik!

1 -qadam: Rejalashtirish

Rejalashtirish
Rejalashtirish

Bu men boshqaruvchining asosiy sxemasi. Agar mening oldingi loyiham bilan solishtirsangiz, sxemasi juda oddiy! Ammo biz bir nechta tugmalar yordamida, kombinatsiyalangan presslar yordamida, bundan ham ko'proq narsani qila olamiz!

Boshqaruv sxemasining g'oyasi shundaki, har bir tugmani erkin, bosish va qo'yib yuborish yoki bosib ushlab turish mumkin. Bosish va qo'yib yuborish yorliqni faollashtiradi, tugmachalarni bosib ushlab turish esa bizga turli xil yorliqlarga kirish imkonini beradi. Agar siz faqat A tugmachasini bosgan bo'lsangiz, siz A yorlig'ini faollashtirasiz, lekin agar A tugmachasini bosib ushlab tursangiz, boshqa yorliq paydo bo'ladi. Siz bir vaqtning o'zida 3 tagacha tugmachani bosib turishingiz mumkin, shuning uchun siz bir nechta asosiy kombinatorikani qo'llaganingizda, bu tizimda nechta kombinatsiya bo'lishi mumkinligini ko'rasiz!

Qo'shimcha beshinchi tugma, men o'ylab topgan asbobning shakliga qarab, tabiiy qo'shimchalardek tuyuldi. Men uni Photoshop -dagi o'zgartirish tugmachalariga kirish uchun ishlatishga qaror qildim. Uning ishlash uslubi boshqa tugmalardan bir oz farq qiladi: bosh barmog'ini ushlab turganda faqat o'zgartirgichlar ishlatiladi. Ular ushlab turilganda faollashadi va bir nechta tugmani bosish mumkin. Shunday qilib, agar A tugmasi Shift va B tugmasi Ctrl bo'lsa, A va B tugmachalarini bosib ushlab tursangiz, bu Shift va Ctrl tugmachalarini bosishga o'xshaydi, lekin bosh barmog'i ushlab turilguncha!

Qobiq ham ergonomik, ham ikki tomonlama bo'lishga mo'ljallangan. Kichkina barmog'imni ishlatish juda zerikarli bo'lmasligi uchun uni mahkam bog'lab qo'yish uchun juda ehtiyot bo'ldim va bu qo'lim mendan kattaroq bo'lganlar uchun ishlashi kerak edi.

2 -qadam: Prototip + kod

Prototip + kod
Prototip + kod

Non panelidagi tugmachalarni sinab ko'rish yaxshidir. Bu juda oddiy, ko'rsatilganidek tugmachalarni va rezistorlarni ulang. Siz uni bu erda kod bilan sinab ko'rishingiz mumkin (pastebin havolasi muqobil):

#qo'shing

// MacOS uchun vthisv variantidan foydalaning:

// char ctrlKey = KEY_LEFT_GUI;

// Windows va Linux uchun vthisv variantidan foydalaning:

char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;

// Bu erda funktsional tugmalar

char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;

const int pinlari = {9, 10, 11, 12, 13}; // barcha tugma pimlari qatori

// Sezuvchanlik

const int THRESH_0 = 10; const int THRESH_1 = 20; const int THRESH_2 = 25; const int THRESH_3 = 50; const int THRESH_4 = 100; const int THRESH_5 = 200;

const int BUTTON_NUM = 5;

// Ramkalarni muzlatish

const int DELAY = 0;

enum Shtatlar {ozod qilingan, bosilgan, ushlab turilgan, ozod qilingan};

tuzish tugmasi {

int pin; Shtatlar shtati; int timeHeld; }; // bosh barmog'i, ko'rsatkich, o'rta, halqa, kichkina;

tugmalar tugmalari [BUTTON_NUM] = {};

initButton tugmasi (int p) {

b tugmasi; pinMod (p, Kirish); b.pin = p; b.shtat = Shtatlar:: ozod qilingan; b.timeHeld = 0; qaytish b; }

bo'sh o'rnatish () {

// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying: Serial.begin (9600); Keyboard.begin ();

while (! Seriyali) {};

// tugmalari (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("sozlash tugmasi"); Serial.print (i); Serial.print ("pin:"); Serial.println (pinlar ); //tugmalar .pin = 1; tugmalar = initButton (pinlar ); Serial.println (tugmalar .pin); }

}

bool readButton (int pin) {

// tekshirish va o'chirish tugmalari, agar (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {true ga qaytish; }} false qaytarish; }

int pintobin (int pin) {

agar (pin == pinlar [0]) 1 qaytarsa; agar (pin == pinlar [1]) 10 qaytarsa; agar (pin == pinlar [2]) 100 qaytarsa; agar (pin == pinlar [3]) 1000 qaytarsa; agar (pin == pinlar [4]) 10000 qaytarsa; } tugmasiStateUpdate (b tugmasi) {

bool press = o'qish tugmasi (b.pin);

switch (b.state) {holatlar:: ozod qilingan: b.timeHeld = 0; if (press) b.state = Shtatlar:: pressed; tanaffus; ish bosildi: b.timeHeld+= 1; if (press) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = Shtatlar:: o'tkazilgan; }} boshqa {// if (b.timeHeld

int getButtonStateCode (b tugmasi)

{qaytish b.shtat*pintobin (b.pin); }

int getCodeByButton (int kod, int indeksi) {

int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeks);

// birinchi operatsiya

agar (opStep == 0) qaytish kodi/10000; r1 =%10000 kodi;

agar (opStep == 1)

qaytarish r1/1000; r2 = r1%1000; agar (opStep == 2) r2/100 qaytarsa; r3 = r2%100; if (opStep == 3) r3/10 qaytarish; r4 = r3%10; agar (opStep == 4) r4/1 qaytarsa; r5 = r4%1; }

void completePress (int pin) {

// Serial.print ("kirish"); // Serial.println (pin); kechikish (THRESH_3); Keyboard.releaseAll (); }

void doAction (int code) {

// O'zgartiruvchilar if (getCodeByButton (kod, 0) == 2) {// Serial.println ("--- o'zgartiruvchilar ----"); if (getCodeByButton (kod, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kod, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kod, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kod, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } else Keyboard.release (shiftKey); } boshqa {

// vazifalarni bajarish

switch (kod) {ish 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); tugmasini bosing (kod); tanaffus; ish 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); tugmasini bosing (kod); tanaffus; ish 3000: // --- | Kova klaviaturasi.press (shiftKey); Keyboard.print ('g'); tugmasini bosing (kod); tanaffus; ish 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); tugmasini bosing (kod); tanaffus; Case 320: //-| o Keyboard.press-ni bekor qilish (ctrlKey); Keyboard.print ('z'); tugmasini bosing (kod); tanaffus; 3020-holat: //-| -o Keyo.tasvirni qaytarish (ctrlKey); Keyboard.print ('y'); tugmasini bosing (kod); tanaffus; ish 30020: // | --o Tarix klaviaturasi.press (shiftKey); Keyboard.print ('y'); tugmasini bosing (kod); tanaffus; ish 230: //-o | Keyboard.press -ni saqlash (ctrlKey); Keyboard.print (lar); tugmasini bosing (kod); tanaffus; ish 3200: //- | o- Tez-p.webp

int buttonCode = 0;

uchun (int i = 0; i <BUTTON_NUM; ++ i) {tugmalari = buttonStateUpdate (tugmalar ); buttonCode+= getButtonStateCode (tugmalar ); }

agar (buttonCode! = 0) {

Serial.print ("tugma kodi:"); Serial.println (buttonCode); }

doAction (tugma kodi);

// qayta ishga tushirish uchun asosiy kodingizni bu erga qo'ying: // for (int i = tugmalar [0]; i <sizeof (tugmalar)/sizeof (tugmalar [0])+tugmalar [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

agar (getCodeByButton (buttonCode, 0)! = 2)

Keyboard.releaseAll ();

kechikish (kechikish);

}

Mantiq haqida ko'p narsa aytishning hojati yo'q, chunki u oxirgi nazoratchimnikiga o'xshaydi, ikkita farq bor:

  1. Tugmalar o'z davlat mashinalari bilan tuzilgan
  2. Shtatlar birgalikda harakatni belgilaydigan kodni tuzadi

Bu tamoyil bit-siljishga o'xshaydi, lekin tugmalar bir nechta holatga ega va ularni ikkilik bilan ifodalash mumkin emasligi sababli, ular o'rniga o'nta kuchga ko'paytiriladi. Keyin men tugmachalarning barcha holatlarini bitta raqamga qo'shaman va doAction () switch iborasiga o'tkazaman, bu erda men barcha yorliqlar kodini qo'yaman.

Ko'rib turganingizdek, men har qanday kombinatsiyani xaritaga kiritmaganman. Men faqat bir nechta sevimli yorliqlarni qo'shdim, qolganini siz xohlagan tarzda to'ldirishni o'z zimmangizga qoldiraman;)

3 -qadam: Koson

Koson
Koson
Koson
Koson
Koson
Koson

Men korpus uchun 3D printerdan foydalanardim. Ko'rib turganingizdek, dizaynda ba'zi kamchiliklar bor va men uni MacGyver -ga yopishga majbur bo'ldim. Men model faylini hozircha joylashtirmayman.

Tugmalar "skameykalarga" issiq yopishtiriladi, shunda ular qopqoqlarni joyida ushlab turadilar. Yumshoq tugmalar, ayniqsa, juda yaxshi, shuning uchun, agar siz menikiga o'xshash ish yasashni rejalashtirmoqchi bo'lsangiz, ulardan bir nechtasini oling.

Bundan tashqari, men korpusga ozgina og'irlik qo'shishni taklif qilaman, chunki u juda yengil. Qo'shimcha gramm uni ushlab turishni tabiiy qiladi.

Hammasini ko'rsatilgan tarzda lehimlang va usb kabelini ulang va hamma narsa joyiga to'g'ri kelishi kerak (elim yordamida)!

4 -qadam: natijalar va mumkin bo'lgan yaxshilanishlar

Natija va mumkin bo'lgan yaxshilanishlar
Natija va mumkin bo'lgan yaxshilanishlar
Natija va mumkin bo'lgan yaxshilanishlar
Natija va mumkin bo'lgan yaxshilanishlar
Natija va mumkin bo'lgan yaxshilanishlar
Natija va mumkin bo'lgan yaxshilanishlar

Mana sizda! Bir qo'li bilan barcha muhim yorliqlarga kirish uchun qo'lda boshqaruvchi!

Mushaklar xotirasini ishlatish kerak, lekin bu haqiqatan ham ko'p qirrali!

Albatta, bu mukammal emas va hozir men uni yaxshilashning ba'zi usullari haqida o'ylayapman. Qoplamani yaxshilash va yorliqlarni qo'shishdan tashqari, menimcha, turli xil yorliqlar bilan bir nechta ilovalarni qo'llab -quvvatlash qiziq bo'lardi. Boshqaruv sxemalari o'rtasida almashish uchun tugmalar birikmasiga ega bo'lishni o'ylayapman, masalan, bir vaqtning o'zida 4 tugmachani bosib, Photoshop yorliqlar kutubxonasini Maya uchun tayyorlangan bir kishiga almashtirish.

Faqat ba'zi fikrlar.

O'qiganingiz uchun tashakkur, keyingi safargacha!

Tavsiya: