Përmbajtje:

Kontrollues i shkurtoreve të dorës (për Photoshop + Më shumë) [Arduino]: 4 hapa
Kontrollues i shkurtoreve të dorës (për Photoshop + Më shumë) [Arduino]: 4 hapa

Video: Kontrollues i shkurtoreve të dorës (për Photoshop + Më shumë) [Arduino]: 4 hapa

Video: Kontrollues i shkurtoreve të dorës (për Photoshop + Më shumë) [Arduino]: 4 hapa
Video: Top 5 programet e parainstaluara të dobishme të Windows 2024, Korrik
Anonim
Kontrollues i shkurtoreve të dorës (për Photoshop + Më shumë) [Arduino]
Kontrollues i shkurtoreve të dorës (për Photoshop + Më shumë) [Arduino]

Herën e fundit kam krijuar një jastëk të vogël kontrolli për ta përdorur në Photoshop. Ajo bëri mrekulli, dhe unë ende e përdor atë! Por është gjithashtu mjaft i kufizuar, me vetëm pesë butona dhe numrat e dobishëm dhe numrat e errësirës. Ende e gjeta veten duke kërkuar shumë tastierën…

Kështu fillova të punoj në përsëritjen tjetër të bllokut të kontrollit, një me shumë më tepër butona dhe funksionalitet. Një bllok kontrolli për t'i sunduar të gjitha.

Kjo nuk është ajo jastëk kontrolli. POR në njëfarë mënyre mund të jetë më mirë.

Po sikur të kishit një ton shkurtesash, por në një paketë super të rehatshme dhe të lehtë që mund të mbani me dorën tuaj të lirë ndërsa vizatoni pa ndërprerje? … Mirë, mjaft me infomercialin.

Ky kontrollues është programuar në atë mënyrë që, me vetëm 4 butona, mund të hartohet deri në 32 shkurtore të mundshme! Butoni shtesë i 5-të është atje për të më lejuar të përdor çelësat modifikues në çdo kombinim, i cili është i dobishëm për shumë programe (a e keni provuar ndonjëherë kombinimin Alt-RMB në PS? Nëse nuk e keni bërë, ju lutemi bëni. Ashtë një shpëtimtar). Unë e shpjegoj sistemin më vonë.

Për t'i bërë të gjitha këto do t'ju duhet:

  • 1 Mikrokontrollues (kam përdorur një Adafruit ItsyBitsy 32u4, por secili duhet të bëjë për aq kohë sa ka çipin atmega32u4)
  • 1 përshtatës mikro-USB (të dhëna, jo vetëm për energji)
  • 5 butona shtypi (kam përdorur buta, si këto)
  • Rezistenca 10k Ohm (1 për buton)
  • Tela, dërrasë buke, material saldimi, etj.
  • Diçka për të bërë një shtresë me bazë (printer 3D, etj.)

Ky është një projekt Arduino i nivelit të mesëm, dhe unë sugjeroj të shikoni tutorialin tim të kaluar për të kuptuar më mirë se çfarë po ndodh, pasi shumica e këtij është një përsëritje e gjërave që kam shpjeguar atje.

Ok, le të fillojmë!

Hapi 1: Planifikimi

Planifikimi
Planifikimi

Kjo është një skemë bazë që kam nxjerrë nga kontrolluesi. Qarku është vërtet i thjeshtë kur e krahasoni me projektin tim të mëparshëm! Por ne do të jemi në gjendje të bëjmë shumë më tepër me disa butona që ka, me fuqinë e shtypjeve të kombinuara!

Ideja prapa skemës së kontrollit është që secili buton mund të jetë falas, i shtypur dhe lëshuar, ose i shtypur dhe i mbajtur. Shtypja dhe lëshimi është ajo që në të vërtetë do të aktivizojë shkurtoren, ndërsa mbajtja e butonave do të na japë qasje në shkurtore të ndryshme. Pra, nëse thjesht shtypni butonin A, do të aktivizoni shkurtoren A, por nëse mbani B kur shtypni A, do të merrni një shkurtore të ndryshme. Mund të mbani deri në 3 butona njëherësh gjatë shtypjes, kështu që kur të aplikoni disa kombinatorikë bazë, do të shihni sa kombinime janë të mundshme me këtë sistem!

Butoni shtesë i pestë u ndje si një shtesë natyrale, duke pasur parasysh formën e dorës që kam dalë. Vendosa ta përdor për të hyrë në çelësat modifikues në Photoshop. Mënyra se si funksionon është pak më ndryshe nga butonat e tjerë: sa herë që mbahet butoni i gishtit të madh, do të përdoren vetëm modifikues. Këto do të aktivizohen kur mbahen dhe shumëfish mund të shtypen. Pra, nëse butoni A është Shift, dhe butoni B është Ctrl, kur mbani shtypur A dhe B do të jetë si të shtypni të dyja Shift dhe Ctrl, por vetëm për aq kohë sa mbahet butoni i gishtit të madh!

Predha është projektuar të jetë edhe ergonomike edhe ambidextrous. Unë u kujdesa shumë për ta bërë atë të përshtatet mirë në mënyrë që përdorimi i gishtit të vogël të mos jetë shumë i lodhshëm dhe duhet të funksionojë edhe për ata me duar më të mëdha se të miat.

Hapi 2: Prototipi + Kodi

Prototip + Kodi
Prototip + Kodi

Practiceshtë praktikë e mirë të provosh butonat në një dërrasë buke. Prettyshtë shumë e thjeshtë, thjesht lidhni butonat dhe rezistorët siç tregohet. Mund ta provoni me kodin këtu (alternativa e lidhjes së pastebin):

#përfshi

// përdorni opsionin vthisv për MacOS:

// char ctrlKey = KEY_LEFT_GUI;

// përdorni opsionin vthisv për Windows dhe Linux:

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

// Çelësat e funksionit këtu

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

const int kunjat = {9, 10, 11, 12, 13}; // grup i të gjitha kunjave të butonave

// Ndjeshmëria

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;

// Ngrij kornizat

const int Vonesa = 0;

enum States {liruar, shtypur, mbajtur, lëshuar};

butoni strukture {

int pin; Shtetet shtetërore; int koha e mbajtur; }; // gishti i madh, indeksi, mesi, unaza, pak;

butonat e butonave [BUTTON_NUM] = {};

butoni initButton (int p) {

butoni b; pinMode (p, INPUT); b.pin = p; b.state = Shtetet:: të liruara; b.timeHeld = 0; kthimi b; }

void setup () {

// vendosni kodin tuaj të konfigurimit këtu, për të ekzekutuar një herë: Serial.begin (9600); Tastiera.filloj ();

ndërsa (! Serial) {};

// Butonat për (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("butoni i vendosjes"); Serial.print (i); Serial.print ("në pin:"); Serial.println (kunjat ); //buttons ELEMENTSi.pin = 1; butonat = initButton (kunjat ); Serial.println (butonat .pin); }

}

bool readButton (int pin) {

// kontrolloni dhe zbërtheni butonat nëse (digitalRead (pin) == HIGH) {vonesë (10); if (digitalRead (pin) == LART) {return true; }} kthehu false; }

int pintobin (int pin) {

nëse (pin == kunjat [0]) kthehet 1; nëse (pin == kunjat [1]) kthehet 10; nëse (pin == kunjat [2]) kthehen 100; nëse (pin == kunjat [3]) kthehen 1000; nëse (pin == kunjat [4]) kthehen 10000; } button buttonStateUpdate (butoni b) {

bool press = butoni read (b.pin);

switch (b.state) {case States:: lirohet: b.timeHeld = 0; nëse (shtyp) b.state = Gjendjet:: shtypur; pushim; rasti i shtypur: b.timeHeld+= 1; if (shtypni) {if (b.timeHeld> (THRESH_1/(1+Vonesë))) {b.state = Shtetet:: mbahen; }} tjetër {// nëse (lind. koha e mbajtur

int getButtonStateCode (butoni b)

{kthimi b.stat*pintobin (b.pin); }

int getCodeByButton (kodi int, indeksi int) {

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

// operacioni i parë

nëse (opStep == 0) ktheni kodin/10000; r1 = kodi%10000;

nëse (opStep == 1)

kthimi r1/1000; r2 = r1%1000; nëse (opStep == 2) kthehet r2/100; r3 = r2%100; nëse (opStep == 3) kthehet r3/10; r4 = r3%10; nëse (opStep == 4) kthehet r4/1; r5 = r4%1; }

pavlefshmeShtypni (int pin) {

// Serial.print ("input"); // Serial.println (pin); vonesë (THRESH_3); Keyboard.releaseAll (); }

void doAction (kodi int) {

// Modifikuesit nëse (getCodeByButton (kodi, 0) == 2) {// Serial.println ("--- modifikuesit ----"); if (getCodeByButton (kodi, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } tjetër Keyboard.release (altKey); if (getCodeByButton (kodi, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } tjetër Keyboard.release (ctrlKey); if (getCodeByButton (kodi, 3)> 0) {Keyboard.press (''); } tjetër Keyboard.release (''); if (getCodeByButton (kodi, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ zhvendosje ------"); } tjetër Keyboard.release (shiftKey); } tjetër {

// kryej detyrat

kaloni (kodi) {rasti 30: // --- | Brush Keyboard.press (shiftKey); Tastiera.print ('b'); komplet Press (kodi); pushim; rasti 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); komplet Press (kodi); pushim; rasti 3000: // --- | Bucket Keyboard.press (shiftKey); Tastiera.print ('g'); komplet Press (kodi); pushim; rasti 30000: // --- | Tastiera Lasso.press (shiftKey); Tastiera.print ('l'); komplet Press (kodi); pushim; rasti 320: //-| o Undo Keyboard.press (ctrlKey); Keyboard.print ('z'); komplet Press (kodi); pushim; rasti 3020: //-| -o Redo Keyboard.press (ctrlKey); Tastiera.print ('y'); komplet Press (kodi); pushim; rasti 30020: // | --o Keyboard History.press (shiftKey); Tastiera.print ('y'); komplet Press (kodi); pushim; rasti 230: //-o | Ruaj Keyboard.press (ctrlKey); Keyboard.print ('s'); komplet Press (kodi); pushim; rasti 3200: //- | o- Tastiera e shpejtë PNG.press (shiftKey); Keyboard.press (ctrlKey); Keyboard.print ('\' '); komplet Press (kodi); pushim; rasti 22230: // ooo | Fn1 Keyboard.press (Fn1Key); komplet Press (kodi); pushim; rasti 22320: // oo | o Fn2 Keyboard.press (Fn2Key); komplet Press (kodi); pushim; rasti 23220: // 0 | 00 Fn3 Keyboard.press (Fn3Key); komplet Press (kodi); pushim; rasti 32220: // | ooo Fn4 Keyboard.press (Fn4Key); komplet Press (kodi); pushim; }}} int f = 0; // ------------------ LEGJ KRYESOR ------------------------- lak i zbrazët () {{

butoni intKodi = 0;

për (int i = 0; i <BUTTON_NUM; ++ i) {buttons = buttonStateUpdate (butonat ); buttonCode+= getButtonStateCode (butonat ); }

nëse (butoniKodi! = 0) {

Serial.print ("kodi i butonit:"); Serial.println (butoniKodi); }

doAction (butoniKodi);

// vendosni kodin tuaj kryesor këtu, për ta ekzekutuar në mënyrë të përsëritur: // for (int i = buttons [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

nëse (getCodeByButton (butoniKodi, 0)! = 2)

Keyboard.releaseAll ();

vonesë (Vonesë);

}

Nuk ka shumë për të thënë për logjikën pasi është e ngjashme me atë të kontrolluesit tim të fundit, me dy dallime të dukshme:

  1. Butonat janë struktura me makinat e tyre shtetërore
  2. Gjendjet përmblidhen së bashku për të bërë një kod që përcakton veprimin

Parimi është i ngjashëm me zhvendosjen e bitit, por për shkak se butonat kanë gjendje të shumta dhe nuk mund të përfaqësohen thjesht me një binar, ato shumëzohen me fuqitë e dhjetë në vend. Pastaj i shtoj të gjitha gjendjet e butonave në një numër të vetëm dhe e kaloj në deklaratën e ndërrimit doAction (), ku vendos të gjithë kodin e shkurtoreve.

Siç mund ta shihni, unë nuk hartova çdo kombinim të mundshëm. Shtova vetëm disa nga shkurtoret e mia të preferuara, jua lë juve të plotësoni pjesën tjetër ashtu siç e shihni më së miri;)

Hapi 3: Zorra

Shtresë e jashtme
Shtresë e jashtme
Shtresë e jashtme
Shtresë e jashtme
Shtresë e jashtme
Shtresë e jashtme

Kam përdorur një printer 3D për shtresën e jashtme. Siç mund ta shihni, dizajni ka disa të meta dhe unë duhej të MacGyver një mënyrë për ta mbyllur atë. Kështu që unë nuk do të postoj skedarin e modelit akoma.

Butonat janë ngjitur nxehtësisht në "stola" në mënyrë që të mbajnë kapelet në vend. Butonat e butë të butë janë veçanërisht të mirë në këtë, prandaj sigurohuni që të merrni disa prej tyre nëse planifikoni të bëni një kuti të ngjashme me timen.

Gjithashtu, unë sugjeroj të shtoni pak peshë brenda kasës, pasi është shumë e lehtë. Gramat shtesë do ta bëjnë mbajtjen e tij të ndjehet më e natyrshme.

Lidhni gjithçka siç tregohet dhe lidhni kabllon usb, dhe gjithçka duhet të përshtatet në vend (me ndihmën e një zam)!

Hapi 4: Rezultati dhe Përmirësimet e Mundshme

Rezultati dhe Përmirësimet e Mundshme
Rezultati dhe Përmirësimet e Mundshme
Rezultati dhe Përmirësimet e Mundshme
Rezultati dhe Përmirësimet e Mundshme
Rezultati dhe Përmirësimet e Mundshme
Rezultati dhe Përmirësimet e Mundshme

Aty e keni! Një kontrollues dore që mund të përdorni për të hyrë në të gjitha shkurtoret tuaja të rëndësishme me vetëm një dorë!

Duhet pak memorie muskulore për t’u përdorur, por është vërtet e gjithanshme!

Sigurisht që nuk është perfekte, dhe tani po mendoj për disa mënyra për ta përmirësuar atë. Përveç përmirësimit të shtresës së jashtme dhe shtimit të shkurtoreve, mendoj se do të isha interesante të mbështesja aplikacione të shumta me shkurtore të ndryshme. Unë jam duke menduar të kem një kombinim butoni për të kaluar midis skemave të kontrollit, si shtypja e 4 butonave në të njëjtën kohë për të kaluar midis një biblioteke të shkurtoreve të Photoshop në një të personalizuar për Maya.

Vetëm disa ide.

Faleminderit për leximin, deri në herën tjetër!

Recommended: