Obsah:

Ruční ovladač zkratek (pro Photoshop + další) [Arduino]: 4 kroky
Ruční ovladač zkratek (pro Photoshop + další) [Arduino]: 4 kroky

Video: Ruční ovladač zkratek (pro Photoshop + další) [Arduino]: 4 kroky

Video: Ruční ovladač zkratek (pro Photoshop + další) [Arduino]: 4 kroky
Video: TOP 10 Počítačové lifehacky, které vám usnadní život 2024, Červenec
Anonim
Ruční ovladač zkratek (pro Photoshop + další) [Arduino]
Ruční ovladač zkratek (pro Photoshop + další) [Arduino]

Minule jsem vytvořil malý ovládací panel pro použití ve Photoshopu. Dokázalo to zázraky a stále to používám! Ale je to také poměrně omezené, s pouhými pěti tlačítky a užitečnými knoflíky velikosti a neprůhlednosti. Stále jsem se přistihl, že hodně sahám po klávesnici…

Začal jsem tedy pracovat na další iteraci ovládacího panelu, na jedné s mnohem více tlačítky a funkcemi. Jeden ovládací panel, který ovládne všechny.

Toto není ta ovládací podložka. ALE svým způsobem by to mohlo být lepší.

Co kdybyste mohli mít spoustu zkratek, ale v super přiléhavém a lehkém balení můžete držet volnou ruku a přitom nepřerušovaně kreslit? … ok, dost s infomercial.

Tento ovladač je naprogramován tak, že pomocí pouhých 4 tlačítek lze jej namapovat až na 32 možných zkratek! Dodatečné 5. tlačítko je k dispozici, aby mi umožnilo použít modifikační klávesy v jakékoli kombinaci, což je užitečné pro mnoho programů (zkoušeli jste někdy kombinaci Alt-RMB v PS? Pokud ne, udělejte to. Je to záchrana života). Systém vysvětlím později.

K tomu všemu budete potřebovat:

  • 1 mikrokontrolér (použil jsem Adafruit ItsyBitsy 32u4, ale každý by měl dělat, pokud má čip atmega32u4)
  • 1 adaptér micro USB (datový, nikoli pouze napájecí)
  • 5 tlačítek (používal jsem měkká, jako tato)
  • Rezistory 10k Ohm (1 na tlačítko)
  • Dráty, prkénko, pájecí materiál atd.
  • Něco, s čím vyrobíte plášť (3D tiskárna atd.)

Jedná se o středně pokročilý projekt Arduino a navrhuji podívat se na můj minulý tutoriál, abych lépe porozuměl tomu, co se děje, protože většina z toho je opakováním věcí, které jsem tam vysvětlil.

Dobře, můžeme začít!

Krok 1: Plánování

Plánování
Plánování

Toto je základní schéma, které jsem nakreslil z ovladače. Obvod je opravdu jednoduchý, když ho porovnáte s mým předchozím projektem! Ale s několika tlačítky, která má, dokážeme mnohem víc, díky síle kombinovaných lisů!

Myšlenkou schématu ovládání je, že každé tlačítko může být buď volné, stisknuté a uvolněné, nebo stisknuté a podržené. Stisknutím a uvolněním se zkratka skutečně aktivuje, zatímco podržení tlačítek nám umožní přístup k různým zkratkám. Pokud tedy jen stisknete tlačítko A, aktivujete zkratku A, ale pokud při stisknutí A podržíte B, dostanete jinou zkratku. Během stisknutí můžete držet až 3 tlačítka najednou, takže když použijete základní kombinatoriku, uvidíte, kolik kombinací je tento systém možný!

Zvláštní páté tlačítko mi připadalo jako přirozený doplněk, vzhledem k tvaru kapesního počítače, který jsem vymyslel. Rozhodl jsem se použít to pro přístup k modifikačním klíčům ve Photoshopu. Způsob fungování se mírně liší od ostatních tlačítek: kdykoli podržíte tlačítko palce, budou použity pouze modifikátory. Ty se aktivují, když jsou podrženy a lze stisknout více. Pokud tedy tlačítko A je Shift a tlačítko B je Ctrl, při podržení kláves A a B to bude jako stisknout Shift i Ctrl, ale pouze tak dlouho, dokud držíte tlačítko palce!

Plášť je navržen tak, aby byl ergonomický a oboustranný. Dával jsem velký pozor, aby dobře seděl, aby používání malíčku nebylo příliš únavné, a mělo by fungovat i pro ty, kteří mají ruce větší než já.

Krok 2: Prototyp + kód

Prototyp + kód
Prototyp + kód

Je dobrým zvykem otestovat tlačítka na prkénku. Je to docela jednoduché, stačí připojit tlačítka a odpory podle obrázku. Můžete to vyzkoušet pomocí kódu zde (alternativa odkazu na pastebin):

#zahrnout

// použijte volbu vthisv pro MacOS:

// char ctrlKey = KEY_LEFT_GUI;

// použijte volbu vthisv pro Windows a Linux:

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

// Funkční klávesy zde

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

konstantní kolíky = {9, 10, 11, 12, 13}; // pole všech kolíků tlačítek

//Citlivost

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;

// Zmrazení snímků

const int ZPOŽDĚNÍ = 0;

státy výčtu {uvolněné, stisknuté, držené, uvolněné};

tlačítko struktury {

int pin; Státy uvádí; int timeHeld; }; // palec, index, střed, prsten, málo;

tlačítka tlačítek [BUTTON_NUM] = {};

tlačítko initButton (int p) {

tlačítko b; pinMode (p, INPUT); b.pin = p; b.state = States:: freed; b.timeHeld = 0; návrat b; }

neplatné nastavení () {

// sem vložte instalační kód, aby se spustil jednou: Serial.begin (9600); Keyboard.begin ();

while (! Serial) {};

// Tlačítka pro (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("tlačítko nastavení"); Serial.print (i); Serial.print ("at pin:"); Serial.println (piny ); //buttons.pin = 1; tlačítka = initButton (piny ); Serial.println (tlačítka .pin); }

}

bool readButton (int pin) {

// tlačítka pro kontrolu 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átí 10; if (pin == piny [2]) vrátí 100; if (pin == piny [3]) vrátí 1000; if (pin == piny [4]) vrátí 10 000; } button buttonStateUpdate (tlačítko b) {

bool press = readButton (b.pin);

switch (b.state) {case States:: freed: b.timeHeld = 0; if (press) b.state = States::Press; přestávka; velká písmena: b.timeHeld+= 1; if (press) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = States:: held; }} else {// if (b.timeHeld

int getButtonStateCode (tlačítko 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);

// první operace

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

if (opStep == 1)

návrat r1/1000; r2 = r1%1000; if (opStep == 2) return r2/100; r3 = r2%100; if (opStep == 3) return r3/10; r4 = r3%10; if (opStep == 4) return r4/1; r5 = r4%1; }

void CompletePress (int pin) {

// Serial.print ("vstup"); // Serial.println (pin); zpoždění (THRESH_3); Keyboard.releaseAll (); }

void doAction (int kód) {

// Modifikátory if (getCodeByButton (kód, 0) == 2) {// Serial.println ("--- modifiers ----"); 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 {

// plnění úkolů

přepínač (kód) {případ 30: // --- | Štětec Keyboard.press (shiftKey); Keyboard.print ('b'); CompletePress (kód); přestávka; případ 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); CompletePress (kód); přestávka; případ 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); CompletePress (kód); přestávka; případ 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); CompletePress (kód); přestávka; case 320: //-| o Undo Keyboard.press (ctrlKey); Keyboard.print ('z'); CompletePress (kód); přestávka; case 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); CompletePress (kód); přestávka; case 30020: // | --o History Keyboard.press (shiftKey); Keyboard.print ('y'); CompletePress (kód); přestávka; případ 230: //-o | Uložit Keyboard.press (ctrlKey); Keyboard.print ('s'); CompletePress (kód); přestávka; case 3200: //- | o- Quick-p.webp

int buttonCode = 0;

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

if (buttonCode! = 0) {

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

doAction (buttonCode);

// sem vložte svůj hlavní kód, který se bude spouštět opakovaně: // 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 ();

zpoždění (ZPOŽDĚNÍ);

}

O logice není moc co říci, protože je podobná logice mého posledního ovladače, se dvěma výraznými rozdíly:

  1. Tlačítka jsou konstruována s vlastními stavovými stroji
  2. Stavy jsou sečteny a vytvoří kód, který určuje akci

Princip je podobný bitovému řazení, ale protože tlačítka mají více stavů a nemohou být jednoduše reprezentována binárním číslem, jsou místo toho vynásobena mocninami deseti. Poté sečtu všechny stavy tlačítek do jednoho čísla a předám je do příkazu přepínače doAction (), kam vložím veškerý kód zkratek.

Jak vidíte, nemapoval jsem všechny možné kombinace. Přidal jsem jen pár mých oblíbených zkratek, zbytek nechám na vás, jak zbytek doplníte, jak vám to nejlépe vyhovuje;)

Krok 3: Pouzdro

Pouzdro
Pouzdro
Pouzdro
Pouzdro
Pouzdro
Pouzdro

Na plášť jsem použil 3D tiskárnu. Jak vidíte, design má několik nedostatků a já jsem musel MacGyveru způsob, jak jej jednoduše zavřít. Takže zatím nebudu zveřejňovat soubor modelu.

Knoflíky jsou nalepeny za tepla na „lavice“, takže drží čepice na svém místě. Měkká tlačítka jsou na tom obzvlášť dobře, takže si jich určitě pořiďte, pokud máte v plánu vyrobit podobný případ jako já.

Také navrhuji přidat malou váhu do pouzdra, protože je velmi lehký. Díky dalším gramům bude držení přirozenější.

Zapájejte vše podle obrázku a připojte USB kabel a vše by mělo zapadnout na místo (pomocí nějakého lepidla)!

Krok 4: Výsledek a možná vylepšení

Výsledek a možná vylepšení
Výsledek a možná vylepšení
Výsledek a možná vylepšení
Výsledek a možná vylepšení
Výsledek a možná vylepšení
Výsledek a možná vylepšení

Tady to máš! Ruční ovladač, pomocí kterého můžete přistupovat ke všem důležitým zkratkám pouze jednou rukou!

Vyžaduje nějakou svalovou paměť, ale je opravdu univerzální!

Samozřejmě to není dokonalé a právě teď přemýšlím o některých způsobech, jak to zlepšit. Kromě vylepšení skříně a přidání zkratek si myslím, že by mě zajímalo podporovat více aplikací s různými zkratkami. Přemýšlím o kombinaci tlačítek pro přepínání mezi schématy ovládání, jako je stisknutí 4 tlačítek současně pro přepínání mezi knihovnou zástupců Photoshopu na míru šitou pro Mayu.

Jen pár nápadů.

Děkujeme za přečtení, až příště!

Doporučuje: