Obsah:
Video: Ručný ovládač skratiek (pre Photoshop + ďalšie) [Arduino]: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
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
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
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:
- Tlačidlá sú štruktúrované pomocou vlastných stavových automatov
- 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ášť
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
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:
Lacnejší štít ESP8266 WiFi pre Arduino a ďalšie mikroskopy: 6 krokov (s obrázkami)
Lacnejší štít ESP8266 WiFi pre Arduino a ďalšie mikroskopy: Aktualizácia: 29. októbra 2020 Testované s knižnicou dosiek ESP8266 V2.7.4 - funguje Aktualizácia: 23. septembra 2016 Nepoužívajte na tento projekt knižnicu dosiek Arduino ESP V2.3.0. V2.2.0 works Aktualizácia: 19. mája 2016 14. časť tohto projektu reviduje knižnice a kód, aby fungoval
Super jednoduché lacné LED diódy USB (a ďalšie položky) pre domácich majstrov: 16 krokov
Super jednoduché lacné LED diódy USB pre domácich majstrov (a ďalšie položky): Dobrý deň, vitajte pri mojom prvom pokyne:) Stavím sa, že všetci po vírusu znova nastavujeme a znovu osídľujeme naše priestory tvorcov, takže si myslím, že je načase, aby sme ich vytvorili. všetci sa naučili vyrábať vlastné USB, a nie spoliehať sa na ľahko vybitú batériu
Nabíjacia stanica USB pre smartfóny a ďalšie zariadenia: 4 kroky
Nabíjacia stanica USB pre smartphony a ďalšie zariadenia: Tento tutoriál vám ukáže, ako vyrobiť nabíjacie stanice USB (smartfóny a ďalšie zariadenia) pre domácnosť, cestovanie, do práce atď. So stále rastúcim počtom pomôcok, ktoré na nabíjanie používajú káble USB (pozri zoznam príkladov v poslednom kroku), rozhodol som sa získať
Automatický katapult na hádzanie krmív pre zvieratá (psy, mačky, kura, atď.), Hádzanie loptičiek a ďalšie !: 4 kroky (s obrázkami)
Automatický katapult na hádzanie krmiva pre domáce zvieratá (pes, mačka, kura, atď.), Hádzanie loptičiek a ďalšie! Dobrý deň, vitajte pri mojom prvom pokyne! Náš pes MILUJE svoje jedlo, doslova ho zožerie za niekoľko sekúnd. Vymýšľal som spôsoby, ako to spomaliť, od guličiek s jedlom vo vnútri až po rozhádzanie po celom dvore. Je prekvapujúce, že je
Ďalšie puzdro na kľúč USB, tentokrát pre analógových fotografov: 3 kroky
Ďalšie puzdro na kľúč USB, tentoraz pre analógových fotografov: Chvíľu som mal na stole položený usb kľúč, puzdro prasklo a otvorilo sa a držal som ho, kým som nenašiel správne náhradné puzdro. Dúfam, že jeho analógový pocit bude prosím filmových fotografov o pokynoch