INHOUDSOPGAWE:
- Stap 1: Beplanning
- Stap 2: prototipe + kode
- Stap 3: Die omhulsel
- Stap 4: Resultaat en moontlike verbeterings
Video: Handheld Shortcut Controller (vir Photoshop + More) [Arduino]: 4 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
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
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
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:
- Die knoppies is strukture met hul eie staatsmasjiene
- 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
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
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:
Arduino (AutoCAD) ShortCut -sleutelbord: 3 stappe
Arduino (AutoCAD) ShortCut -sleutelbord: Hallo aan almal, nadat ek baie ure geblaai en baie oulike dinge ontwerp het, het ek uiteindelik begin om iets te bou. Maak u dus gereed vir my eerste Instructable! Ek spandeer baie van my ure, sowel professioneel as vir plesier, om te krabbel
Ikea ENEBY 20 Power Mod (No More Auto Sleep): 4 stappe
Ikea ENEBY 20 Power Mod (No More Auto Sleep): Ikea se ENEBY -luidsprekers het uitstekende klank vir die prys. Die grootste nadeel is dat hulle hulself afskakel na ongeveer 15-20 minute se musiek wat nie gespeel is nie, selfs al is die gekoppelde toestel steeds verbind. As u dit weer aanskakel, is die volume weer terug
Goeie more onderklere: 11 stappe (met foto's)
Goodmorning Underwear: Die Goodmorning Underwear is 'n broekie wat vibreer om jou in die oggend wakker te maak. Hierdie projek is 'n voortsetting van my voortgesette pogings om die gebied van elektroniese onderklere te bevorder. Anders as al my vorige projekte wat komplekse sirkels gebruik
Crawl Space Monitor (ook bekend as: No More Frozen Pipes !!): 12 stappe (met foto's)
Crawl Space Monitor (ook bekend as: No More Frozen Pipes !!): Water na my huis kom uit my put deur 'n onverhitte kruipruimte. Al die loodgieterswerk in die kombuis en badkamer loop ook deur hierdie ruimte. (Binne-loodgieterswerk was in die middel van die sewentigerjare 'n neerslag in hierdie huis!) Ek gebruik hitte lampe op
Die 'Do More' -timer, geïnspireer deur Casey Neistat: 4 stappe (met foto's)
Die 'Do More' -timer, geïnspireer deur Casey Neistat: Somer, die heerlike seisoen wanneer dinge gebeur. Maar soms is ons geneig om die tyd te vergeet. Om ons te herinner aan die oorblywende tyd, het ek hierdie Casey Neistat se 'Do More' DIY -arduino -aangedrewe timer ontwerp, wat geprogrammeer kan word om die oorblywende tyd van enige