Turinys:

Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]: 4 žingsniai
Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]: 4 žingsniai

Video: Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]: 4 žingsniai

Video: Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]: 4 žingsniai
Video: ROYAL elektrinis paspirtukas CHOPPER CITYCOCO 3000w Elektros citycoco 3000w elektrinis ciklas 2024, Lapkritis
Anonim
Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]
Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]

Paskutinį kartą sukūriau mažą valdymo bloką, skirtą naudoti „Photoshop“. Tai padarė stebuklus, ir aš vis dar jį naudoju! Tačiau jis taip pat yra gana ribotas - jame yra tik penki mygtukai ir naudingo dydžio bei neskaidrumo ratukai. Aš vis dar pastebėjau, kad daug pasiekiau klaviatūros …

Taigi aš pradėjau dirbti su kita valdymo bloko iteracija, viena su daugiau mygtukų ir funkcijų. Vienas valdymo pultas, skirtas juos visus valdyti.

Tai ne tas valdymo blokas. BET tam tikra prasme tai gali būti geriau.

Ką daryti, jei galėtumėte turėti daugybę nuorodų, tačiau itin patogioje ir lengvoje pakuotėje galite laikyti laisvą ranką, kol piešiate nenutrūkstamai? … gerai, užtenka informacijos.

Šis valdiklis yra užprogramuotas taip, kad vos 4 mygtukus galima susieti iki 32 galimų nuorodų! Papildomas 5 mygtukas yra tam, kad galėčiau naudoti modifikavimo klavišus bet kokiu deriniu, o tai naudinga daugeliui programų (ar kada nors bandėte „Alt-RMB“kombinaciją PS? Jei to nepadarėte, prašome tai padaryti. Tai gelbėja). Vėliau paaiškinsiu sistemą.

Norėdami visa tai padaryti, jums reikės:

  • 1 mikrokontroleris (aš naudojau „Adafruit ItsyBitsy 32u4“, bet bet kuris turėtų veikti tol, kol turi atmega32u4 lustą)
  • 1 „micro-USB“adapteris (duomenys, ne tik maitinimas)
  • 5 mygtukai (naudojau minkštus, tokius kaip šie)
  • 10k omų rezistoriai (1 mygtukui)
  • Laidai, duonos lenta, litavimo medžiaga ir kt.
  • Kažką padaryti korpusą (3D spausdintuvas ir pan.)

Tai yra vidutinio lygio „Arduino“projektas, ir siūlau pažvelgti į savo ankstesnę pamoką, kad geriau suprastumėte, kas vyksta, nes daug kas tai yra dalykų, kuriuos ten paaiškinau, kartojimas.

Gerai, pradėkime!

1 žingsnis: planavimas

Planavimas
Planavimas

Tai yra pagrindinė schema, kurią nupiešiau valdikliui. Grandinė yra tikrai paprasta, jei palyginsite ją su mano ankstesniu projektu! Bet mes galėsime nuveikti daug daugiau su keliais mygtukais, kuriuos jis turi, naudodami kombinuotus paspaudimus!

Valdymo schemos idėja yra ta, kad kiekvienas mygtukas gali būti laisvas, paspaustas ir atleistas arba paspaustas ir laikomas. Paspaudimas ir atleidimas iš tikrųjų suaktyvins nuorodą, o laikydami nuspaudę mygtukus suteiksime prieigą prie skirtingų nuorodų. Taigi, jei tik paspausite mygtuką A, suaktyvinsite spartųjį klavišą A, bet jei paspausite A laikydami nuspaudę B, gausite kitą nuorodą. Paspaudę vienu metu galite laikyti iki 3 mygtukų, taigi, kai pritaikysite keletą pagrindinių kombinacijų, pamatysite, kiek derinių galima naudojant šią sistemą!

Papildomas penktas mygtukas atrodė kaip natūralus priedas, atsižvelgiant į mano sugalvoto rankinio prietaiso formą. Aš nusprendžiau jį naudoti norėdamas pasiekti „Photoshop“modifikavimo klavišus. Jo veikimo būdas šiek tiek skiriasi nuo kitų mygtukų: kai laikomas nykščio mygtukas, bus naudojami tik modifikatoriai. Jie suaktyvinami, kai jie laikomi, ir galima paspausti kelis. Taigi, jei mygtukas A yra „Shift“, o mygtukas „B“- „Ctrl“, laikydami nuspaudę A ir B bus tarsi paspaudę „Shift“ir „Ctrl“, bet tik tol, kol bus laikomas nykščio mygtukas!

Korpusas suprojektuotas taip, kad būtų ergonomiškas ir daugialypis. Aš labai rūpinausi, kad jis būtų tvirtai prigludęs, kad mažojo piršto naudojimas nebūtų per daug varginantis ir kad jis tiktų ir tiems, kurių rankos didesnės už mano.

2 žingsnis: prototipas + kodas

Prototipas + kodas
Prototipas + kodas

Gera praktika yra išbandyti duonos lentos mygtukus. Tai gana paprasta, tiesiog prijunkite mygtukus ir rezistorius, kaip parodyta. Čia galite išbandyti kodą (alternatyva pastebin link):

#įtraukti

// naudokite „MacOS“parinktį „vthisv“:

// char ctrlKey = KEY_LEFT_GUI;

// naudokite „vthisv“parinktį „Windows“ir „Linux“:

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

// Funkcijų klavišai čia

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

const int smeigtukai = {9, 10, 11, 12, 13}; // visų mygtukų kaiščių masyvas

// Jautrumas

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;

// Rėmelių užšaldymas

const int DELAY = 0;

enum States {išlaisvintas, spaudžiamas, laikomas, paleistas};

struktūros mygtukas {

int pin; Valstijos valstija; int timeHeld; }; // nykštys, rodyklė, vidurys, žiedas, mažas;

mygtukų mygtukai [BUTTON_NUM] = {};

mygtukas initButton (int p) {

mygtukas b; pinMode (p, INPUT); b.pin = p; b.valstybė = valstybės:: išlaisvinta; b. timeHeld = 0; grąža b; }

void setup () {

// įdėkite čia savo sąrankos kodą, kad paleistumėte vieną kartą: Serial.begin (9600); Klaviatūra.begin ();

while (! Serial) {};

// Mygtukai (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("nustatyti mygtuką"); Serijinis atspaudas (i); Serial.print ("ties pin:"); Serial.println (kaiščiai ); //buttons.pin = 1; mygtukai = initButton (kaiščiai ); Serial.println (mygtukai .pin); }

}

bool readButton (int pin) {

// tikrinimo ir atjungimo mygtukai, jei (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; }

int pintobin (int pin) {

if (smeigtukas == smeigtukai [0]) grąžina 1; if (smeigtukas == smeigtukai [1]) grąžina 10; if (smeigtukas == smeigtukai [2]) grąžina 100; if (smeigtukas == smeigtukai [3]) grąžina 1000; if (smeigtukas == smeigtukai [4]) grąžina 10000; } mygtukas buttonStateUpdate (mygtukas b) {

bool press = readButton (b.pin);

jungiklis (b.state) {atvejo būsenos:: išlaisvinta: b.timeHeld = 0; if (press) b.state = Būsenos:: presuotas; pertrauka; didžiosios ir mažosios raidės: b.timeHeld+= 1; if (paspauskite) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: held; }} else {// if (b.timeHeld

int getButtonStateCode (mygtukas b)

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

int getCodeByButton (int kodas, int indeksas) {

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

// pirmoji operacija

if (opStep == 0) grąžinimo kodas/10000; r1 = kodas%10000;

jei (opStep == 1)

grąža 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 ("įvestis"); // Serial.println (smeigtukas); vėlavimas (THRESH_3); Keyboard.releaseAll (); }

void doAction (int kodas) {

// Modifikatoriai if (getCodeByButton (kodas, 0) == 2) {// Serial.println ("--- modifiers ----"); if (getCodeByButton (kodas, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kodas, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kodas, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kodas, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ pamaina ------"); } else Keyboard.release (shiftKey); } Kitas {

// atlikti užduotis

jungiklis (kodas) {atvejis 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (kodas); pertrauka; 300 atvejis: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); completePress (kodas); pertrauka; 3000 atvejis: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (kodas); pertrauka; atvejis 30000: // --- | „Lasso Keyboard.press“(„shiftKey“); Keyboard.print ('l'); completePress (kodas); pertrauka; 320 atvejis: //-| o Anuliuoti klaviatūrą.paspauskite (ctrlKey); Keyboard.print ('z'); completePress (kodas); pertrauka; atvejis 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); completePress (kodas); pertrauka; atvejis 30020: // | --o Istorijos klaviatūra.press (shiftKey); Keyboard.print ('y'); completePress (kodas); pertrauka; 230 atvejis: //-o | Išsaugoti Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kodas); pertrauka; atvejis 3200: //- | o- Greita-p.webp

int buttonCode = 0;

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

if (buttonCode! = 0) {

Serial.print ("mygtuko kodas:"); Serial.println (buttonCode); }

doAction (buttonCode);

// įdėkite čia savo pagrindinį kodą, kad jis būtų paleistas pakartotinai: // for (int i = mygtukai [0]; i <sizeof (mygtukai)/sizeof (mygtukai [0])+mygtukai [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

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

Keyboard.releaseAll ();

uždelsimas (DELAY);

}

Nėra daug ką pasakyti apie logiką, nes ji panaši į mano paskutinio valdiklio logiką, turinti du pastebimus skirtumus:

  1. Mygtukai yra sukurti naudojant savo būsenos mašinas
  2. Būsenos apibendrinamos, kad būtų sukurtas veiksmą lemiantis kodas

Principas yra panašus į bitų perkėlimą, tačiau kadangi mygtukai turi kelias būsenas ir negali būti tiesiog atvaizduojami dvejetainiu, jie dauginami iš dešimties galių. Tada sudedu visas mygtukų būsenas į vieną skaičių ir perkeliu jas į „doAction ()“jungiklio teiginį, kuriame įdedu visus nuorodų kodus.

Kaip matote, nenužymėjau visų galimų derinių. Pridėjau tik kelis mėgstamiausius sparčiuosius klavišus, palieku jums patiems užpildyti, kaip jums atrodo geriau;)

3 žingsnis: korpusas

Korpusas
Korpusas
Korpusas
Korpusas
Korpusas
Korpusas

Korpusui naudojau 3D spausdintuvą. Kaip matote, dizainas turi tam tikrų trūkumų, ir aš turėjau „MacGyver“jį tiesiog uždaryti. Taigi modelio failo dar neskelbsiu.

Mygtukai yra karštai priklijuoti prie „suoliukų“, kad dangteliai būtų laikomi vietoje. Minkšti mygtukai yra ypač geri, todėl būtinai įsigykite kai kuriuos iš jų, jei planuojate pagaminti panašų į mano dėklą.

Taip pat siūlau pridėti šiek tiek svorio dėklo viduje, nes jis yra labai lengvas. Papildomi gramai laikys jį natūraliau.

Lituokite viską, kaip parodyta, ir prijunkite USB kabelį, ir viskas turėtų tilpti į vietą (naudojant tam tikrus klijus)!

4 žingsnis: rezultatas ir galimi patobulinimai

Rezultatas ir galimi patobulinimai
Rezultatas ir galimi patobulinimai
Rezultatas ir galimi patobulinimai
Rezultatas ir galimi patobulinimai
Rezultatas ir galimi patobulinimai
Rezultatas ir galimi patobulinimai

Štai ir turi! Rankinis valdiklis, kurį galite naudoti norėdami pasiekti visus svarbius sparčiuosius klavišus tik viena ranka!

Tam reikia raumenų atminties, tačiau ji tikrai universali!

Žinoma, tai nėra tobula, ir dabar galvoju apie keletą būdų, kaip tai pagerinti. Be korpuso tobulinimo ir nuorodų pridėjimo, manau, kad man būtų įdomu palaikyti kelias programas naudojant skirtingus sparčiuosius klavišus. Aš galvoju turėti mygtukų derinį, kad perjungtumėte valdymo schemas, pvz., Vienu metu paspausdami 4 mygtukus, kad perjungtumėte „Photoshop“sparčiųjų klavišų biblioteką į vieną pritaikytą „Maya“.

Tik keletas idėjų.

Ačiū, kad skaitote, iki kito karto!

Rekomenduojamas: