Satura rādītājs:

Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]: 4 soļi
Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]: 4 soļi

Video: Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]: 4 soļi

Video: Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]: 4 soļi
Video: Как удалить фон картинки в Excel / Word / PowerPoint – Просто! 2024, Jūlijs
Anonim
Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]
Rokas saīsnes kontrolieris (Photoshop + vairāk) [Arduino]

Iepriekšējā reizē es izveidoju nelielu vadības spilventiņu, ko izmantot Photoshop. Tas darīja brīnumus, un es to joprojām izmantoju! Bet tas ir arī diezgan ierobežots, tikai ar piecām pogām un noderīga izmēra un necaurredzamības ciparripām. Es joprojām atklāju, ka daudz ķeras pie tastatūras…

Tāpēc es sāku strādāt pie nākamās vadības spilventiņa iterācijas - viena ar vairāk pogām un funkcionalitāti. Viens vadības bloks, lai tos visus pārvaldītu.

Tas nav tas vadības bloks. BET savā ziņā tas varētu būt labāk.

Ko darīt, ja jums varētu būt daudz īsinājumtaustiņu, bet īpaši ērtā un vieglā iepakojumā jūs varat turēt ar brīvo roku, kamēr zīmējat nepārtraukti? … Labi, pietiek ar informatīvo reklāmu.

Šis kontrolieris ir ieprogrammēts tā, ka tikai ar 4 pogām to var kartēt līdz pat 32 iespējamiem īsceļiem! Papildu piektā poga ir paredzēta, lai ļautu man izmantot modifikācijas taustiņus jebkurā kombinācijā, kas ir noderīga daudzām programmām (vai jūs kādreiz esat mēģinājis Alt-RMB kombināciju PS? Ja neesat to izdarījis, lūdzu, dariet to. Tas ir glābējs). Vēlāk es izskaidrošu sistēmu.

Lai to visu izdarītu, jums būs nepieciešams:

  • 1 mikrokontrolleris (es izmantoju Adafruit ItsyBitsy 32u4, bet jebkuram vajadzētu darīt, ja vien tam ir atmega32u4 mikroshēma)
  • 1 mikro-USB adapteris (dati, nevis tikai barošana)
  • 5 spiedpogas (es izmantoju tādas mīkstas)
  • 10 kΩ rezistori (1 uz vienu pogu)
  • Vadi, maizes dēlis, lodēšanas materiāls utt.
  • Kaut kas, ar ko izgatavot apvalku (3D printeris utt.)

Šis ir vidēja līmeņa Arduino projekts, un es iesaku aplūkot savu iepriekšējo pamācību, lai labāk izprastu notiekošo, jo liela daļa no tā atkārtojas tur izskaidrotajām lietām.

Labi, sāksim!

1. solis: plānošana

Plānošana
Plānošana

Šī ir kontroliera pamata shēma. Ķēde ir patiešām vienkārša, ja salīdzina to ar manu iepriekšējo projektu! Bet mēs varēsim paveikt daudz vairāk ar dažām pogām, kas tam ir, ar kombinēto preses spēku!

Kontroles shēmas ideja ir tāda, ka katra poga var būt brīva, nospiesta un atlaista, vai nospiesta un turēta. Nospiežot un atlaižot, tas faktiski aktivizēs saīsni, bet, turot nospiestu pogas, mēs varēsim piekļūt dažādiem īsceļiem. Tātad, ja jūs vienkārši nospiedīsiet pogu A, jūs aktivizēsit īsceļu A, bet, turot nospiestu B, nospiežot A, jūs saņemsiet citu saīsni. Nospiežot, jūs varat vienlaikus turēt līdz 3 pogām, tāpēc, pielietojot dažas pamata kombinatorikas, jūs redzēsit, cik daudz kombināciju ir iespējama ar šo sistēmu!

Papildu piektā poga jutās kā dabisks papildinājums, ņemot vērā rokas formu, kuru es izdomāju. Es nolēmu to izmantot, lai piekļūtu modifikācijas taustiņiem Photoshop. Tās darbības veids nedaudz atšķiras no citām pogām: ikreiz, kad tiek turēta īkšķa poga, tiks izmantoti tikai pārveidotāji. Tie tiks aktivizēti, kad tie tiek turēti, un var nospiest vairākus. Tātad, ja poga A ir Shift un poga B ir Ctrl, turot nospiestu A un B, tas būs kā nospiest gan Shift, gan Ctrl, bet tikai tik ilgi, kamēr tiek turēta īkšķa poga!

Korpuss ir veidots gan ergonomisks, gan abpusējs. Es ļoti rūpējos, lai tas būtu cieši pieguļošs, lai mazā pirkstiņa lietošana nebūtu pārāk nogurdinoša, un tam vajadzētu darboties arī tiem, kuru rokas ir lielākas par manējo.

2. darbība: prototips + kods

Prototips + kods
Prototips + kods

Laba prakse ir pārbaudīt maizes dēļa pogas. Tas ir diezgan vienkārši, vienkārši pievienojiet pogas un rezistorus, kā parādīts attēlā. To var pārbaudīt ar kodu šeit (alternatīva pastebin link):

#iekļaut

// izmantojiet opciju vthisv operētājsistēmai MacOS:

// char ctrlKey = KEY_LEFT_GUI;

// izmantojiet opciju vthisv operētājsistēmai Windows un Linux:

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

// Funkciju taustiņi šeit

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

const int tapas = {9, 10, 11, 12, 13}; // visu pogu tapu masīvs

// Jutīgums

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;

// Iesaldēt rāmjus

const int DELAY = 0;

enum valstis {atbrīvotas, presētas, turētas, atbrīvotas};

strukturēšanas poga {

int pin; Štati; int timeHeld; }; // īkšķis, rādītājs, vidus, gredzens, maz;

pogu pogas [BUTTON_NUM] = {};

poga initButton (int p) {

poga b; pinMode (p, INPUT); b.pin = p; b.valsts = Valstis:: atbrīvots; b. timeHeld = 0; atgriešanās b; }

void setup () {

// ielieciet šeit savu iestatīšanas kodu, lai palaistu vienu reizi: Serial.begin (9600); Keyboard.begin ();

while (! Serial) {};

// Pogas priekš (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("iestatīšanas poga"); Sērijas nospiedums (i); Serial.print ("pie tapas:"); Sērijas.println (tapas ); //pogas.pin = 1; pogas = initButton (tapas ); Serial.println (pogas .pin); }

}

bool readButton (int pin) {

// pārbaudes un debounce pogas, ja (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} atgriezt nepatiesu; }

int pintobin (int pin) {

if (pin == pins [0]) return 1; ja (pin == tapas [1]) atgriežas 10; if (pin == pins [2]) return 100; if (pin == pins [3]) return 1000; if (pin == pins [4]) return 10000; } pogas pogaStateUpdate (poga b) {

bool press = readButton (b.pin);

slēdzis (b.valsts) {lietu valstis:: atbrīvots: b.timeHeld = 0; ja (prese) b.valsts = valstis:: nospiests; pārtraukums; burts nospiests: b.timeHeld+= 1; ja (nospiediet) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: aizturēts; }} cits {// ja (b.timeHeld

int getButtonStateCode (poga b)

{return b.valsts*pintobīns (b.pin); }

int getCodeByButton (int kods, int indekss) {

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

// pirmā darbība

ja (opStep == 0) atgriešanās kods/10000; r1 = kods%10000;

ja (opStep == 1)

atgriešanās r1/1000; r2 = r1%1000; ja (opStep == 2) atgriežas r2/100; r3 = r2%100; ja (opStep == 3) atgriežas r3/10; r4 = r3%10; ja (opStep == 4) atgriežas r4/1; r5 = r4%1; }

void completePress (int pin) {

// Serial.print ("ievade"); // Serial.println (pin); kavēšanās (THRESH_3); Keyboard.releaseAll (); }

void doAction (int kods) {

// Modifikatori if (getCodeByButton (kods, 0) == 2) {// Serial.println ("--- modifikatori ----"); if (getCodeByButton (kods, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } cits Keyboard.release (altKey); if (getCodeByButton (kods, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } cits Keyboard.release (ctrlKey); if (getCodeByButton (kods, 3)> 0) {Keyboard.press (''); } cits Keyboard.release (''); if (getCodeByButton (kods, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ maiņa ------"); } cits Keyboard.release (shiftKey); } vēl {

// veikt uzdevumus

slēdzis (kods) {gadījums 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (kods); pārtraukums; 300. gadījums: // --- | Dzēšgumijas tastatūra. Nospiediet (shiftKey); Keyboard.print ('e'); completePress (kods); pārtraukums; gadījums 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (kods); pārtraukums; lieta 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); completePress (kods); pārtraukums; gadījums 320: //-| o Undo Keyboard.press (ctrlKey); Keyboard.print ('z'); completePress (kods); pārtraukums; gadījums 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); completePress (kods); pārtraukums; gadījums 30020: // | --o Vēsture Keyboard.press (shiftKey); Keyboard.print ('y'); completePress (kods); pārtraukums; 230. gadījums: //-o | Saglabāt Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kods); pārtraukums; 3200. gadījums: //- | o- Ātrā-p.webp

int buttonCode = 0;

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

ja (buttonCode! = 0) {

Serial.print ("pogas kods:"); Serial.println (buttonCode); }

doAction (buttonCode);

// ievietojiet savu galveno kodu šeit, lai to palaistu atkārtoti: // for (int i = pogas [0]; i <sizeof (pogas)/sizeof (pogas [0])+pogas [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}

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

Keyboard.releaseAll ();

kavēšanās (DELAY);

}

Nav daudz ko teikt par loģiku, jo tā ir līdzīga manam pēdējam kontrolierim ar divām ievērojamām atšķirībām:

  1. Pogas ir veidotas ar savām valsts mašīnām
  2. Štati tiek apkopoti kopā, lai izveidotu kodu, kas nosaka darbību

Princips ir līdzīgs bitu maiņai, taču, tā kā pogām ir vairāki stāvokļi un tās nevar vienkārši attēlot ar bināro, tās tiek reizinātas ar desmit pilnvarām. Pēc tam visus pogu stāvokļus sasummēju vienā skaitlī un nododu to doAction () slēdža paziņojumam, kur ievietoju visu īsceļu kodu.

Kā redzat, es neizklāstīju visas iespējamās kombinācijas. Es pievienoju tikai dažus no saviem iecienītākajiem īsceļiem, atstāju jūsu ziņā aizpildīt pārējo, kā jums vislabāk šķiet;)

3. solis: korpuss

Korpuss
Korpuss
Korpuss
Korpuss
Korpuss
Korpuss

Korpusam es izmantoju 3D printeri. Kā redzat, dizainā ir daži trūkumi, un man bija MacGyver veids, kā to vienkārši aizvērt. Tāpēc es vēl nepublicēšu modeļa failu.

Pogas ir karsti pielīmētas uz "soliņiem", lai tās turētu vāciņus vietā. Mīkstās spiedpogas ir īpaši labas, tāpēc noteikti iegādājieties dažas no tām, ja plānojat izgatavot man līdzīgu futrāli.

Turklāt es iesaku korpusam pievienot nelielu svaru, jo tas ir ļoti viegls. Papildu grami ļaus turēt to dabiskāku.

Lodējiet visu, kā parādīts attēlā, un pievienojiet usb kabeli, un visam vajadzētu ievietoties vietā (ar kādu līmi)!

4. darbība. Rezultāts un iespējamie uzlabojumi

Rezultāts un iespējamie uzlabojumi
Rezultāts un iespējamie uzlabojumi
Rezultāts un iespējamie uzlabojumi
Rezultāts un iespējamie uzlabojumi
Rezultāts un iespējamie uzlabojumi
Rezultāts un iespējamie uzlabojumi

Tur jums tas ir! Rokas kontrolieris, kuru varat izmantot, lai piekļūtu visiem svarīgākajiem īsceļiem tikai ar vienu roku!

Lai izmantotu muskuļu atmiņu, tā ir daudzpusīga!

Protams, tas nav ideāli, un šobrīd es domāju par dažiem veidiem, kā to uzlabot. Papildus korpusa uzlabošanai un īsceļu pievienošanai es domāju, ka man būtu interesanti atbalstīt vairākas lietojumprogrammas ar dažādiem īsceļiem. Es domāju izveidot pogu kombināciju, lai pārslēgtos starp vadības shēmām, piemēram, nospiest 4 pogas vienlaicīgi, lai pārslēgtos starp Photoshop īsinājumtaustiņu bibliotēku un pielāgotu Maya.

Tikai dažas idejas.

Paldies, ka izlasījāt, līdz nākamajai reizei!

Ieteicams: