Obsah:

Ručný ovládač skratiek (pre Photoshop + ďalšie) [Arduino]: 4 kroky
Ručný ovládač skratiek (pre Photoshop + ďalšie) [Arduino]: 4 kroky

Video: Ručný ovládač skratiek (pre Photoshop + ďalšie) [Arduino]: 4 kroky

Video: Ručný ovládač skratiek (pre Photoshop + ďalšie) [Arduino]: 4 kroky
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Ručný ovládač skratiek (pre Photoshop a ďalšie) [Arduino]
Ručný ovládač skratiek (pre Photoshop a ďalšie) [Arduino]

Minule som vytvoril malú ovládaciu podložku na použitie vo Photoshope. Dokázalo to zázraky a stále to používam! Je však tiež dosť obmedzený, pretože obsahuje iba päť tlačidiel a praktické číselníky veľkosti a nepriehľadnosti. Stále som sa pristihol, že veľa siaham po klávesnici …

Začal som pracovať na ďalšej iterácii ovládacieho panela, na ktorej je oveľa viac tlačidiel a funkcií. Jeden ovládací panel, ktorý vládne všetkým.

Toto nie je ovládací panel. ALE istým spôsobom by to mohlo byť lepšie.

Čo keby ste mohli mať veľa skratiek, ale v super priliehavom a ľahkom balení sa môžete držať voľnej ruky a pritom nerušene kresliť? … ok, dosť s infomercial.

Tento ovládač je naprogramovaný tak, že pomocou iba 4 tlačidiel je možné ho priradiť až k 32 možným skratkám! Dodatočné 5. tlačidlo je k dispozícii, aby mi umožnilo používať modifikačné klávesy v akejkoľvek kombinácii, čo je užitočné pre mnoho programov (vyskúšali ste niekedy kombináciu Alt-RMB v PS? Ak nie, urobte to. Je to záchranca života). Systém vysvetlím neskôr.

Na to, aby ste to všetko urobili, budete potrebovať:

  • 1 mikrokontrolér (použil som Adafruit ItsyBitsy 32u4, ale každý by to mal robiť, pokiaľ má čip atmega32u4)
  • 1 adaptér micro USB (dátový, nie iba napájací)
  • 5 tlačidiel (použil som mäkké, ako tieto)
  • Rezistory 10 kOhm (1 na tlačidlo)
  • Drôty, doštička, spájkovací materiál atď.
  • Niečo, s čím vyrobíte kryt (3D tlačiareň atď.)

Jedná sa o projekt Arduino na strednej úrovni a navrhujem pozrieť sa na môj predchádzajúci tutoriál, aby ste lepšie pochopili, čo sa deje, pretože väčšina z nich je opakovaním vecí, ktoré som tam vysvetlil.

Dobre, začnime!

Krok 1: Plánovanie

Plánovanie
Plánovanie

Toto je základná schéma, ktorú som nakreslil pre ovládač. Okruh je skutočne jednoduchý, keď ho porovnáte s mojím predchádzajúcim projektom! Ale s niekoľkými tlačidlami, ktoré má, dokážeme oveľa viac, vďaka sile kombinovaných lisov!

Myšlienkou schémy ovládania je, že každé tlačidlo môže byť ľubovoľné, stlačené a uvoľnené alebo stlačené a podržané. Stlačenie a uvoľnenie je to, čo skutočne aktivuje skratku, zatiaľ čo podržanie tlačidiel nám poskytne prístup k rôznym skratkám. Ak teda stlačíte tlačidlo A, aktivujete skratku A, ale ak pri stlačení A podržíte tlačidlo B, dostanete inú skratku. Počas stlačenia môžete držať až 3 tlačidlá naraz, takže keď použijete základnú kombinatoriku, uvidíte, koľko kombinácií je s týmto systémom možné!

Piate tlačidlo navyše sa mi zdalo ako prirodzený doplnok, vzhľadom na tvar vreckového počítača, s ktorým som prišiel. Rozhodol som sa použiť to na prístup k klávesom modifikátora vo Photoshope. Spôsob, akým funguje, sa mierne líši od ostatných tlačidiel: pri každom podržaní tlačidla palca sa použijú iba modifikátory. Tieto sa aktivujú podržaním a stlačením viacerých. Ak je teda tlačidlo A Shift a tlačidlo B je Ctrl, pri podržaní klávesu A a B to bude ako stlačenie klávesu Shift a Ctrl, ale iba tak dlho, ako budete držať tlačidlo palca!

Plášť je navrhnutý tak, aby bol ergonomický a obojstranný. Dával som veľký pozor, aby dobre sedel, aby používanie malíčka nebolo príliš únavné a aby fungovalo aj pre tých, ktorí majú ruky väčšie ako ja.

Krok 2: Prototyp + kód

Prototyp + kód
Prototyp + kód

Osvedčeným postupom je otestovať tlačidlá na doske. Je to veľmi jednoduché, stačí pripojiť tlačidlá a odpory podľa obrázku. Môžete to vyskúšať pomocou kódu tu (alternatíva odkazu na pastebin):

#zahrnúť

// použitie možnosti vthisv pre MacOS:

// char ctrlKey = KEY_LEFT_GUI;

// použite možnosť vthisv pre Windows a Linux:

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

// Funkčné klávesy tu

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

piny const int = {9, 10, 11, 12, 13}; // pole všetkých kolíkov tlačidiel

// Citlivosť

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;

// Zmrazenie rámcov

const int ZPOŽDENIE = 0;

stavy enum {uvoľnené, stlačené, zadržané, uvoľnené};

tlačidlo štruktúrovania {

int pin; Štáty uvádzajú; int timeHeld; }; // palec, index, stred, prsteň, málo;

tlačidlové tlačidlá [BUTTON_NUM] = {};

tlačidlo initButton (int p) {

tlačidlo b; pinMode (p, INPUT); b.pin = p; b.state = Štáty:: oslobodené; b.timeHeld = 0; návrat b; }

neplatné nastavenie () {

// sem vložte svoj inštalačný kód, aby sa spustil raz: Serial.begin (9600); Keyboard.begin ();

while (! Serial) {};

// Tlačidlá pre (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("tlačidlo nastavenia"); Serial.print (i); Serial.print ("na pine:"); Serial.println (piny ); //buttons.pin = 1; tlačidlá = initButton (piny ); Serial.println (tlačidlá .pin); }

}

bool readButton (int pin) {

// tlačidlá kontroly a odskoku if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; }

int pintobin (int pin) {

if (pin == piny [0]) return 1; if (pin == piny [1]) vráti 10; if (pin == piny [2]) vráti 100; if (pin == piny [3]) vráti 1000; if (pin == piny [4]) vráti 10 000; } button buttonStateUpdate (tlačidlo b) {

bool press = readButton (b.pin);

switch (b.state) {case States:: freed: b.timeHeld = 0; if (press) b.state = States::Press; prestávka; prípad stlačený: b.timeHeld+= 1; if (press) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = States:: held; }} else {// if (b.timeHeld

int getButtonStateCode (tlačidlo b)

{return b.state*pintobin (b.pin); }

int getCodeByButton (int kód, int index) {

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

// prvá operácia

if (opStep == 0) návratový kód/10 000; r1 = kód%10 000;

ak (opStep == 1)

vrátiť r1/1000; r2 = r1%1000; if (opStep == 2) return r2/100; r3 = r2%100; ak (opStep == 3) vráti r3/10; r4 = r3%10; if (opStep == 4) return r4/1; r5 = r4%1; }

void CompletePress (int pin) {

// Serial.print ("vstup"); // Serial.println (pin); oneskorenie (THRESH_3); Keyboard.releaseAll (); }

void doAction (int kód) {

// Modifikátory if (getCodeByButton (kód, 0) == 2) {// Serial.println ("--- modifikátory ----"); if (getCodeByButton (kód, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kód, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kód, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kód, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } else Keyboard.release (shiftKey); } else {

// plnenie úloh

prepínač (kód) {prípad 30: // --- | Kefa Keyboard.press (shiftKey); Keyboard.print ('b'); CompletePress (kód); prestávka; prípad 300: // --- | Guma Keyboard.press (shiftKey); Keyboard.print ('e'); CompletePress (kód); prestávka; prípad 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); CompletePress (kód); prestávka; prípad 30 000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); CompletePress (kód); prestávka; prípad 320: //-| o Späť Keyboard.press (ctrlKey); Keyboard.print ('z'); CompletePress (kód); prestávka; case 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); CompletePress (kód); prestávka; prípad 30020: // | --o History Keyboard.press (shiftKey); Keyboard.print ('y'); CompletePress (kód); prestávka; prípad 230: //-o | Uložiť Keyboard.press (ctrlKey); Keyboard.print ('s'); CompletePress (kód); prestávka; prípad 3200: //- | o- Quick-p.webp

int buttonCode = 0;

for (int i = 0; i <BUTTON_NUM; ++ i) {buttons = buttonStateUpdate (tlačidlá ); buttonCode+= getButtonStateCode (tlačidlá ); }

if (buttonCode! = 0) {

Serial.print ("kód tlačidla:"); Serial.println (buttonCode); }

doAction (buttonCode);

// sem zadajte svoj hlavný kód, aby sa spúšťal opakovane: // for (int i = buttons [0]; i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

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

Keyboard.releaseAll ();

oneskorenie (ZPOŽDENIE);

}

O logike nie je čo povedať, pretože je podobná logike môjho posledného ovládača, s dvoma výraznými rozdielmi:

  1. Tlačidlá sú štruktúrované pomocou vlastných stavových automatov
  2. Stavy sa sčítajú a vznikne kód, ktorý určuje akciu

Princíp je podobný bitovému radeniu, ale pretože tlačidlá majú viac stavov a nemožno ich jednoducho znázorniť binárne, násobia sa namiesto toho mocninami desiatich. Potom sčítam všetky stavy tlačidiel do jedného čísla a odovzdám ich do príkazu prepínača doAction (), kde vložím všetok kód skratiek.

Ako vidíte, nemapoval som všetky možné kombinácie. Pridal som len niekoľko obľúbených skratiek, ostatné nechám na vás, ako ostatné uznáte za vhodné;)

Krok 3: Plášť

Plášť
Plášť
Plášť
Plášť
Plášť
Plášť

Na plášť som použil 3D tlačiareň. Ako vidíte, dizajn má niekoľko nedostatkov a musel som MacGyvera jednoducho zavrieť. Takže zatiaľ nezverejním modelový súbor.

Gombíky sú zalepené za tepla na „lavičkách“, aby držali čiapky na svojom mieste. Mäkké tlačidlá sú v tom obzvlášť dobré, takže si ich určite zaobstarajte, ak plánujete vyrobiť podobný prípad ako ja.

Tiež navrhujem pridať malú váhu do puzdra, pretože je veľmi ľahký. Vďaka ďalším gramom sa z držania bude cítiť prirodzenejšie.

Všetko spájkujte podľa obrázku a zapojte USB kábel a všetko by malo zapadnúť na svoje miesto (pomocou lepidla)!

Krok 4: Výsledok a možné vylepšenia

Výsledok a možné zlepšenia
Výsledok a možné zlepšenia
Výsledok a možné zlepšenia
Výsledok a možné zlepšenia
Výsledok a možné zlepšenia
Výsledok a možné zlepšenia

Tu to máte! Ručný ovládač, pomocou ktorého sa dostanete ku všetkým svojim dôležitým skratkám iba jednou rukou!

Na použitie je potrebná určitá svalová pamäť, ale je skutočne všestranná!

Samozrejme, nie je to dokonalé a práve teraz premýšľam o niektorých spôsoboch, ako to zlepšiť. Okrem vylepšenia krytu a pridávania skratiek si myslím, že by bolo zaujímavé podporovať viac aplikácií s rôznymi skratkami. Rozmýšľam nad kombináciou tlačidiel na prepínanie medzi schémami ovládania, ako napríklad stlačením 4 tlačidiel súčasne prepínať medzi knižnicou skratiek Photoshopu a aplikáciou šitou na mieru pre Mayu.

Len pár nápadov.

Ďakujem za prečítanie, až nabudúce!

Odporúča: