Sadržaj:
Video: Ručni kontroler prečaca (za Photoshop + više) [Arduino]: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Zadnji put stvorio sam sićušni kontrolni jastučić za korištenje u Photoshopu. Činio je čuda, a ja ga i dalje koristim! Ali također je prilično ograničen, sa samo pet gumba i brojčanicima korisne veličine i neprozirnosti. I dalje sam mnogo posegnuo za tipkovnicom …
Tako sam počeo raditi na sljedećoj iteraciji kontrolne pločice, jednoj s mnogo više gumba i funkcionalnosti. Jedan kontrolni jastučić za sve njih.
Ovo nije onaj kontrolni jastučić. ALI na neki način bi moglo biti bolje.
Što ako biste mogli imati hrpu prečaca, ali u super udobnom i laganom pakiranju možete držati slobodnu ruku dok crtate bez prekida? … u redu, dosta s info reklamom.
Ovaj upravljač programiran je na način da se sa samo 4 gumba može mapirati na do 32 moguća prečaca! Dodatni 5. gumb postoji kako bi mi omogućio korištenje tipki za mijenjanje u bilo kojoj kombinaciji, što je korisno za mnoge programe (jeste li ikada probali kombinaciju Alt-RMB u PS-u? Ako niste, učinite to. To je spas.). Sustav ću objasniti kasnije.
Za sve ovo trebat će vam:
- 1 mikrokontroler (koristio sam Adafruit ItsyBitsy 32u4, ali svaki bi trebao raditi sve dok ima čip atmega32u4)
- 1 mikro-USB adapter (podaci, ne samo za napajanje)
- 5 tipki (koristio sam mekane, poput ovih)
- 10k Ohm otpornici (1 po gumbu)
- Žice, matična ploča, materijal za lemljenje itd.
- Nešto za izradu kućišta (3D pisač itd.)
Ovo je Arduino projekt srednje razine i predlažem da pogledate moj prošli vodič kako biste bolje razumjeli što se događa, jer je mnogo toga ponavljanje stvari koje sam tamo objasnio.
U redu, počnimo!
Korak 1: Planiranje
Ovo je osnovna shema koju sam nacrtao kontrolera. Krug je stvarno jednostavan kad ga usporedite s mojim prijašnjim projektom! No moći ćemo učiniti mnogo više s nekoliko gumba koje ima, snagom kombiniranih pritisaka!
Ideja iza kontrolne sheme je da svaki gumb može biti slobodan, pritisnuti i otpustiti ili pritisnuti i držati. Pritisak i otpuštanje je ono što će zapravo aktivirati prečac, dok će držanje tipki omogućiti pristup različitim prečacima. Dakle, ako samo pritisnete gumb A, aktivirat ćete prečac A, ali ako zadržite B kada pritisnete A, dobit ćete drugačiji prečac. Možete pritisnuti do 3 gumba odjednom dok pritisnete, pa ćete primijeniti neke osnovne kombinatorike i vidjeti koliko je kombinacija moguće s ovim sustavom!
Dodatni peti gumb osjetio se kao prirodan dodatak, s obzirom na oblik ručnog uređaja koji sam smislio. Odlučio sam ga koristiti za pristup modifikacijskim tipkama u Photoshopu. Način na koji se radi malo se razlikuje od ostalih gumba: kad god se pritisne gumb palca, koristit će se samo modifikatori. One će se aktivirati kada se drže i višestruko se može pritisnuti. Dakle, ako je gumb A Shift, a gumb B Ctrl, kad držite pritisnute A i B, to će biti kao da pritisnete i Shift i Ctrl, ali samo dok je pritisnuta tipka palca!
Ljuska je dizajnirana tako da bude ergonomska i dvostrana. Dobro sam pazio da mi dobro prilegne kako korištenje malog prsta ne bi bilo previše zamorno, a trebao bi djelovati i onima s većim rukama od moje.
Korak 2: Prototip + kod
Dobra je praksa isprobati gumbe na ploči. Prilično je jednostavno, samo spojite gumbe i otpornike kao što je prikazano. Ovdje ga možete testirati pomoću koda (alternativa pastebin link):
#uključi
// koristiti opciju vthisv za MacOS:
// char ctrlKey = KEY_LEFT_GUI;
// koristiti opciju vthisv za Windows i Linux:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Funkcijski ključevi ovdje
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int pins = {9, 10, 11, 12, 13}; // niz svih pinova gumba
// Osjetljivost
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;
// Zamrzni okvire
const int DELAY = 0;
enum States {oslobođen, pritisnut, zadržan, pušten};
gumb struct {
int pin; Države države; int timeHeld; }; // palac, kažiprst, sredina, prsten, malo;
gumbi gumba [BUTTON_NUM] = {};
button initButton (int p) {
gumb b; pinMode (p, INPUT); b.pin = p; b.država = države:: oslobođen; b.timeHeld = 0; povrat b; }
void setup () {
// ovdje postavite svoj kôd za postavljanje, da biste ga jednom pokrenuli: Serial.begin (9600); Keyboard.begin ();
while (! Serijski) {};
// Gumbi za (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("gumb za postavljanje"); Serijski.ispis (i); Serial.print ("na pin:"); Serial.println (pinovi ); // gumbi .pin = 1; gumbi = initButton (pinovi ); Serial.println (gumbi .pin); }
}
bool readButton (int pin) {
// gumbi za provjeru i otkazivanje if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; }
int pintobin (int pin) {
if (pin == pins [0]) vrati 1; if (pin == pins [1]) vrati 10; if (pin == pins [2]) vrati 100; if (pin == pins [3]) vrati 1000; if (pin == pins [4]) vrati 10000; } button buttonStateUpdate (gumb b) {
bool press = readButton (b.pin);
switch (b.state) {slučajevi stanja:: oslobođeno: b.timeHeld = 0; if (pritisnite) b.state = Države:: pritisnuto; pauza; pritisnuto kućište: b.timeHeld+= 1; if (pritisnite) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = States:: held; }} else {// if (b.timeHeld
int getButtonStateCode (gumb b)
{return b.state*pintobin (b.pin); }
int getCodeByButton (int kôd, int indeks) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeks);
// prva operacija
if (opStep == 0) povratni kod/10000; r1 = kôd%10000;
ako (opStep == 1)
povrat r1/1000; r2 = r1%1000; if (opStep == 2) vrati r2/100; r3 = r2%100; if (opStep == 3) vrati r3/10; r4 = r3%10; if (opStep == 4) vrati r4/1; r5 = r4%1; }
void completePress (int pin) {
// Serial.print ("ulaz"); // Serial.println (pin); kašnjenje (THRESH_3); Keyboard.releaseAll (); }
void doAction (int kod) {
// Modifikatori if (getCodeByButton (code, 0) == 2) {// Serial.println ("--- modifikatori ----"); if (getCodeByButton (code, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (code, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (code, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (code, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ pomak ------"); } else Keyboard.release (shiftKey); } else {
// izvršavanje zadataka
prekidač (kod) {slučaj 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (kod); pauza; slučaj 300: // --- | Tipkovnica za brisanje.pritisnite (shiftKey); Keyboard.print ('e'); completePress (kod); pauza; slučaj 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (kod); pauza; slučaj 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); completePress (kod); pauza; slučaj 320: //-| o Poništi tipkovnicu.press (ctrlKey); Keyboard.print ('z'); completePress (kod); pauza; kućište 3020: //-| -o Ponovi tipkovnicu.press (ctrlKey); Keyboard.print ('y'); completePress (kod); pauza; case 30020: // | --o History Keyboard.press (shiftKey); Keyboard.print ('y'); completePress (kod); pauza; slučaj 230: //-o | Spremi tipkovnicu.press (ctrlKey); Keyboard.print ('s'); completePress (kod); pauza; kućište 3200: //- | o- Quick-p.webp
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {gumbi = buttonStateUpdate (gumbi ); buttonCode+= getButtonStateCode (gumbi ); }
if (buttonCode! = 0) {
Serial.print ("kôd gumba:"); Serial.println (buttonCode); }
doAction (buttonCode);
// ovdje unesite svoj glavni kôd, da biste ga ponavljali: // for (int i = gumbi [0]; i <sizeof (gumbi)/sizeof (gumbi [0])+gumbi [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
if (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
kašnjenje (DELAY);
}
Nema se puno za reći o logici jer je slična onoj mog zadnjeg kontrolera, s dvije značajne razlike:
- Gumbi su strukture s vlastitim strojevima za stanje
- Stanja se zbrajaju zajedno kako bi se napravio kod koji određuje radnju
Princip je sličan pomaku bitova, ali budući da gumbi imaju više stanja i ne mogu se jednostavno prikazati binarno, umjesto toga se množe sa stepenima deset. Zatim zbrajam sva stanja gumba u jedan broj i prosljeđujem ga u naredbu switch doAction (), gdje stavljam sve kodove prečaca.
Kao što vidite, nisam mapirao svaku moguću kombinaciju. Dodao sam samo nekoliko svojih najdražih prečaca, ostavljam vama da popunite ostale kako vam odgovara;)
Korak 3: Kućište
Koristio sam 3D pisač za kućište. Kao što vidite, dizajn ima neke nedostatke i morao sam MacGyver način da ga samo zatvoriti. Tako da još neću objavljivati datoteku modela.
Gumbi su vruće zalijepljeni na "klupe" tako da drže kape na mjestu. Mekani gumbi u tome su posebno dobri, stoga svakako nabavite neke od njih ako namjeravate napraviti slučaj sličan mom.
Također, predlažem da dodate malo težine unutar kućišta jer je vrlo lagano. Dodatni grami učinit će držanje prirodnijim.
Lemite sve kako je prikazano i spojite USB kabel, i sve bi trebalo stati na svoje mjesto (uz pomoć ljepila)!
Korak 4: Rezultat i moguća poboljšanja
Evo ga! Ručni kontroler pomoću kojeg možete pristupiti svim važnim prečacima samo jednom rukom!
Za korištenje je potrebno malo mišićne memorije, ali zaista je svestrano!
Naravno da nije savršeno, a sada razmišljam o nekim načinima da ga poboljšam. Osim poboljšanja kućišta i dodavanja prečaca, mislim da bi bilo zanimljivo podržati više aplikacija s različitim prečacima. Razmišljam o kombinaciji gumba za prebacivanje između kontrolnih shema, poput istovremenog pritiskanja 4 gumba za prebacivanje s biblioteke prečaca u Photoshopu na prilagođenu za Mayu.
Samo neke ideje.
Hvala na čitanju, do sljedećeg puta!
Preporučeni:
Uzgoj više salate na manje prostora ili Uzgoj salate u svemiru, (više ili manje) .: 10 koraka
Uzgoj više salate na manje prostora ili … Uzgoj salate u svemiru, (više ili manje) .: Ovo je profesionalna prijava na natječaj Growing Beyond Earth, Maker, predana putem Instructables. Ne mogu biti više uzbuđen što ću dizajnirati za proizvodnju svemirskih usjeva i objaviti svoj prvi Instructable. Za početak, natječaj nas je zamolio da
Korištenje više od 4 motora - slaganje više štitnika motora: 3 koraka
Korištenje više od 4 motora - slaganje više štitnika motora: Vibrotaktilni senzorski uređaj za zamjenu i povećanje senzora (https: //www.instructables.com/id/Vibrotactile-Sens …) pokazuje način izgradnje uređaja koji prevodi senzorni unos u vibracijske podražaje. Ti vibracijski podražaji su p
Arduino kontroler za igre DIY - Arduino PS2 kontroler igre - Igranje Tekkena s DIY Arduino gamepadom: 7 koraka
Arduino kontroler za igre DIY | Arduino PS2 kontroler igre | Igranje Tekkena s DIY Arduino gamepad -om: Zdravo dečki, igranje igara uvijek je zabavno, ali igranje sa vlastitim DIY prilagođenim kontrolorom igara je zabavnije. Zato ćemo u ovim uputama napraviti kontroler igre pomoću arduino pro micro
Okvir prečaca za prijenosno računalo: 3 koraka (sa slikama)
Okvir za prečace za prijenosno računalo: Materijali: Node MCU esp8266 Prekidači s gumbima od 5x 6 mm ad ” list šperploče 3 mm Akrilna plastična ploča 11x žica Lemilica + lemljenje Laserski rezač Vruće ljepilo Ljepilo za drvo Bušilica za drvo
Kako natjerati vaš Xbox kontroler da treperi s nekim LED -ima, ali se više neće tresti: 4 koraka
Kako natjerati vaš Xbox kontroler da treperi s nekim LED -ima, ali se više neće tresti: VAŠ DALJINAC ĆE TRPETI, ALI NEĆE VIŠE VIBRIRATI JER U OVOM PROJEKTU MORATE IZVLAČITI MOTOR