INHOUDSOPGAWE:

Handheld Shortcut Controller (vir Photoshop + More) [Arduino]: 4 stappe
Handheld Shortcut Controller (vir Photoshop + More) [Arduino]: 4 stappe

Video: Handheld Shortcut Controller (vir Photoshop + More) [Arduino]: 4 stappe

Video: Handheld Shortcut Controller (vir Photoshop + More) [Arduino]: 4 stappe
Video: The controller everybody is using… 😱 2024, November
Anonim
Handbediende kortpadkontroleerder (vir Photoshop + meer) [Arduino]
Handbediende kortpadkontroleerder (vir Photoshop + meer) [Arduino]

Ek het laas 'n klein bedieningsblokkie geskep om in Photoshop te gebruik. Dit het wondere verrig, en ek gebruik dit steeds! Maar dit is ook taamlik beperk, met slegs vyf knoppies en die nuttige grootte en deursigtigheidsknoppies. Ek het nog steeds baie na die sleutelbord gestrek …

Dus het ek begin werk aan die volgende iterasie van die bedieningsblok, een met baie meer knoppies en funksies. Een bedieningsblok om hulle almal te regeer.

Dit is nie die bedieningspaneel nie. MAAR op 'n manier kan dit beter wees.

Wat as u baie kortpaaie kon hê, maar in 'n super styf en liggewig pakket kan u met u vrye hand vashou terwyl u ononderbroke teken? … ok, genoeg met die inligting.

Hierdie kontroleerder is so geprogrammeer dat dit met slegs 4 knoppies tot 32 moontlike kortpaaie gekarteer kan word! Die bykomende 5de knoppie is daar sodat ek wysigingsleutels in enige kombinasie kan gebruik, wat nuttig is vir baie programme (het u al ooit die Alt-RMB-kombinasie in PS probeer? As u dit nog nie gedoen het nie. Dit is 'n lewensredder). Ek verduidelik die stelsel later.

Om dit alles te maak, benodig u:

  • 1 Mikrokontroleur (ek het 'n Adafruit ItsyBitsy 32u4 gebruik, maar enige moet dit doen solank dit die atmega32u4 -chip het)
  • 1 mikro-USB-adapter (data, nie net krag nie)
  • 5 drukknoppies (ek het sagte, soos hierdie gebruik)
  • 10k Ohm weerstande (1 per knoppie)
  • Drade, broodbord, soldeermateriaal, ens.
  • Iets om 'n omhulsel mee te maak (3D -drukker, ens.)

Dit is 'n Arduino-projek op intermediêre vlak, en ek stel voor dat ek na my vorige tutoriaal kyk om beter te verstaan wat aan die gang is, aangesien baie hiervan 'n herhaling is van die dinge wat ek daar verduidelik het.

Ok, laat ons begin!

Stap 1: Beplanning

Beplanning
Beplanning

Dit is 'n basiese skematiese voorstelling van die kontroleerder. Die kring is regtig eenvoudig as u dit vergelyk met my vorige projek! Maar ons sal baie meer kan doen met die paar knoppies wat dit het, met die krag van gekombineerde perse!

Die idee agter die kontroleskema is dat elke knoppie gratis, ingedruk en losgemaak kan word, of ingedruk kan word. Deur die kortpad in te druk en los te laat, sal ons toegang tot verskillende kortpaaie kry. As u dus net op knoppie A druk, aktiveer u kortpad A, maar as u B hou terwyl u op A druk, kry u 'n ander kortpad. U kan tot 3 knoppies gelyktydig hou terwyl u daarop druk, dus as u basiese kombinatorika toepas, sal u sien hoeveel kombinasies met hierdie stelsel moontlik is!

Die ekstra vyfde knoppie voel soos 'n natuurlike toevoeging, gegewe die vorm van die handrekenaar waarmee ek vorendag gekom het. Ek het besluit om dit te gebruik om toegang tot wysigingsleutels in Photoshop te verkry. Die manier waarop dit werk, verskil effens van die ander knoppies: wanneer die duimknoppie ingedruk word, word slegs wysigers gebruik. Dit sal geaktiveer word wanneer dit ingedruk word en daar kan op verskeie gedruk word. As knoppie A Shift is, en knoppie B Ctrl is, as u A en B ingedruk hou, sal dit wees om beide Shift en Ctrl te druk, maar slegs solank die duimknoppie ingedruk word!

Die dop is ontwerp om ergonomies en ambidextrous te wees. Ek het baie moeite gedoen om dit goed te laat pas sodat die pinkie nie te vermoeiend is nie, en dit behoort ook te werk vir diegene met groter hande as myne.

Stap 2: prototipe + kode

Prototipe + kode
Prototipe + kode

Dit is 'n goeie idee om die knoppies op 'n broodbord te toets. Dit is redelik eenvoudig, verbind net die knoppies en weerstande soos aangedui. U kan dit hier met die kode toets (alternatief vir pastebin -skakel):

#insluit

// gebruik die vthisv -opsie vir MacOS:

// char ctrlKey = KEY_LEFT_GUI;

// gebruik die vthisv -opsie vir Windows en Linux:

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

// Funksiesleutels hier

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

const int pins = {9, 10, 11, 12, 13}; // verskeidenheid van alle knoppies

// Gevoeligheid

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;

// Bevries rame

const int DELAY = 0;

enum State {bevry, ingedruk, vasgehou, vrygelaat};

struct -knoppie {

int pin; State verklaar; int timeHeld; }; // duim, indeks, middel, ring, min;

knoppie knoppies [BUTTON_NUM] = {};

knoppie initButton (int p) {

knoppie b; pinMode (p, INVOER); b.pin = p; b.staat = state:: bevry; b.timeHeld = 0; terugkeer b; }

ongeldige opstelling () {

// sit u opstellingskode hier om een keer te werk: Serial.begin (9600); Keyboard.begin ();

terwyl (! Reeks) {};

// Knoppies vir (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("stel knoppie"); Serial.print (i); Serial.print ("by pin:"); Serial.println (penne ); // knoppies .pin = 1; knoppies = initButton (penne ); Serial.println (knoppies .pin); }

}

bool readButton (int pin) {

// kyk en ontkoppel knoppies as (digitalRead (pin) == HOOG) {delay (10); if (digitalRead (pin) == HOOG) {return true; }} vals teruggee; }

int pintobin (int pin) {

as (pin == pins [0]) terugkeer 1; as (pin == penne [1]) 10 teruggee; as (pin == pins [2]) terugkeer 100; as (pin == pins [3]) 1000 terugstuur; as (pin == pins [4]) 10000 teruggee; } knoppie buttonStateUpdate (knoppie b) {

bool press = readButton (b.pin);

switch (b.staat) {case States:: freed: b.timeHeld = 0; as (druk) b.state = State:: ingedruk; breek; saak ingedruk: b.timeHeld+= 1; if (druk) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = State:: gehou; }} anders {// if (b.timeHeld

int getButtonStateCode (knoppie b)

{terugkeer b.staat*pintobin (b.pin); }

int getCodeByButton (int -kode, int -indeks) {

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

// eerste operasie

as (opStep == 0) retourkode/10000; r1 = kode%10000;

as (opStep == 1)

opgawe r1/1000; r2 = r1%1000; as (opStep == 2) opgawe r2/100; r3 = r2%100; as (opStep == 3) opgawe r3/10; r4 = r3%10; as (opStep == 4) opgawe r4/1; r5 = r4%1; }

void completePress (int pin) {

// Serial.print ("invoer"); // Serial.println (pen); vertraging (THRESH_3); Keyboard.releaseAll (); }

void doAction (int code) {

// Wysigers as (getCodeByButton (kode, 0) == 2) {// Serial.println ("--- wysigers ----"); as (getCodeByButton (kode, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } anders Keyboard.release (altKey); if (getCodeByButton (kode, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } anders Keyboard.release (ctrlKey); as (getCodeByButton (kode, 3)> 0) {Keyboard.press (''); } anders Keyboard.release (''); as (getCodeByButton (kode, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } anders Keyboard.release (shiftKey); } anders {

// take uitvoer

skakelaar (kode) {saak 30: // --- | Borsel sleutelbord.pers (shiftKey); Sleutelbord.afdruk ('b'); completePress (kode); breek; saak 300: // --- | Eraser Keyboard.press (shiftKey); Sleutelbord.afdruk ('e'); completePress (kode); breek; saak 3000: // --- | Bucket Keyboard.press (shiftKey); Sleutelbord.afdruk ('g'); completePress (kode); breek; saak 30000: // --- | Lasso Keyboard.press (shiftKey); Sleutelbord.afdruk ('l'); completePress (kode); breek; saak 320: //-| o Ontdoen Keyboard.press (ctrlKey); Sleutelbord.afdruk ('z'); completePress (kode); breek; saak 3020: //-| -o Herhaal sleutelbord.pers (ctrlKey); Sleutelbord.afdruk ('y'); completePress (kode); breek; saak 30020: // | --o History Keyboard.press (shiftKey); Sleutelbord.afdruk ('y'); completePress (kode); breek; saak 230: //-o | Stoor Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kode); breek; case 3200: //- | o- Quick-p.webp

int buttonCode = 0;

for (int i = 0; i <BUTTON_NUM; ++ i) {knoppies = buttonStateUpdate (knoppies ); buttonCode+= getButtonStateCode (knoppies ); }

as (buttonCode! = 0) {

Serial.print ("knoppie kode:"); Serial.println (buttonCode); }

doAction (knoppieKode);

// plaas u hoofkode hier om herhaaldelik te hardloop: // for (int i = knoppies [0]; i <sizeof (knoppies)/sizeof (knoppies [0])+knoppies [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

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

Keyboard.releaseAll ();

vertraging (DELAY);

}

Daar is nie veel te sê oor die logika nie, aangesien dit soortgelyk is aan dié van my laaste kontroleerder, met twee noemenswaardige verskille:

  1. Die knoppies is strukture met hul eie staatsmasjiene
  2. Die state word saamgevat om 'n kode te maak wat die aksie bepaal

Die beginsel is soortgelyk aan bitsverskuiwing, maar omdat die knoppies verskeie toestande het en nie bloot met 'n binêre voorgestel kan word nie, word dit in plaas daarvan vermenigvuldig met magte van tien. Ek voeg dan al die knoppies in 'n enkele nommer by en gee dit oor na die skakelaarverklaring doAction (), waar ek al die kortpadkode sit.

Soos u kan sien, het ek nie elke moontlike kombinasie gekarteer nie. Ek het net 'n paar van my gunsteling kortpaaie bygevoeg; ek laat dit aan u om die res in te vul hoe u dit die beste vind;)

Stap 3: Die omhulsel

Die omhulsel
Die omhulsel
Die omhulsel
Die omhulsel
Die omhulsel
Die omhulsel

Ek het 'n 3D -drukker vir die omhulsel gebruik. Soos u kan sien, het die ontwerp 'n paar foute, en ek moes MacGyver 'n manier maak om dit net toe te maak. Ek sal dus nog nie die modellêer plaas nie.

Die knoppies word warm vasgeplak op "banke" sodat hulle die pette op hul plek hou. Die sagte drukknoppies is veral goed daarmee, dus kry 'n paar daarvan as u van plan is om 'n saak soortgelyk aan myne te maak.

Ek stel ook voor dat u 'n bietjie gewig in die tas toevoeg, want dit is baie lig. Die ekstra gram sal dit meer natuurlik laat voel.

Soldeer alles soos aangedui en verbind die usb -kabel, en alles moet op sy plek pas (met behulp van 'n bietjie gom)!

Stap 4: Resultaat en moontlike verbeterings

Resultaat en moontlike verbeterings
Resultaat en moontlike verbeterings
Resultaat en moontlike verbeterings
Resultaat en moontlike verbeterings
Resultaat en moontlike verbeterings
Resultaat en moontlike verbeterings

Daar het jy dit! 'N Handbeheerder waarmee u met slegs een hand toegang tot al u belangrike kortpaaie kan kry!

Dit verg 'n bietjie spiergeheue om te gebruik, maar dit is baie veelsydig!

Dit is natuurlik nie perfek nie, en ek dink nou aan 'n paar maniere om dit te verbeter. Afgesien van die verbetering van die omhulsel en die toevoeging van kortpaaie, dink ek dat ek interessant sou wees om verskeie toepassings met verskillende kortpaaie te ondersteun. Ek dink daaraan om 'n knoppiekombinasie te hê om tussen kontroleskemas te wissel, soos om op vier knoppies gelyktydig te druk om te wissel tussen 'n Photoshop-kortpadbiblioteek na 'n pasgemaakte Maya.

Net 'n paar idees.

Dankie dat u gelees het, tot die volgende keer!

Aanbeveel: