Kazalo:

Mini nadzorna ploščica za Photoshop (Arduino): 6 korakov
Mini nadzorna ploščica za Photoshop (Arduino): 6 korakov

Video: Mini nadzorna ploščica za Photoshop (Arduino): 6 korakov

Video: Mini nadzorna ploščica za Photoshop (Arduino): 6 korakov
Video: PLAYSTATION - ТЕЛЕФОН! 2024, November
Anonim
Mini nadzorna ploščica za Photoshop (Arduino)
Mini nadzorna ploščica za Photoshop (Arduino)

Tukaj vam bom pokazal, kako narediti majhno orodje za hitrejše delo v Photoshopu!

Tipkovnice, izdelane posebej za PS, niso nove, vendar ne ponujajo ravno tistega, kar potrebujem. Kot slikar večino svojega časa v Photoshopu porabim za prilagajanje nastavitve čopiča in mislim, da mi preprosti gumbi za bližnjice ne dajejo nadzora, ki bi ustrezal mojemu toku dela. Zato sem se odločil, da naredim svojo tipkovnico, majhno, nevsiljivo in s številčnicami, ki mi dajo tisto analogno interakcijo, ki sem si jo vedno želel.

Način delovanja je preprost: za omogočanje interakcije mikrokrmilnika s Photoshopom izkoristimo privzete bližnjice. S ploščo, ki jo računalnik lahko bere kot tipkovnico/miško, moramo le nekaj preprostih vrstic kode povedati računalniku, naj prebere vsak vnos kot kombinacijo pritiskov tipk. Zdaj je gumb za razveljavitev le pritisk na gumb!

Začnimo! Za ta projekt boste potrebovali:

  • 1 Sparkfun ProMicro (ali Arduino Leonardo, ni priporočljivo)
  • 1 adapter za mikro USB
  • 6 gumbov (ali poljubno število)
  • 10 k ohmski upori (1 za vsak gumb)
  • 1 potenciometer
  • 1 rotacijski dajalnik
  • žice, plošča, plošča, spajkanje, zatiči glave itd.

Za ta projekt lahko uporabite Arduino Leonardo, vendar je ProMicro veliko cenejša alternativa, ki uporablja isti čip atmega32u4, ima več zatičev in je v precej manjši obliki, zaradi česar je kot nalašč za tipkovnico.

Če želite programirati ProMicro v Arduino IDE, boste morda morali najprej nastaviti nekaj stvari. Več o tem lahko preberete v vodniku SparkFuna:

Če ima računalnik težave pri iskanju naprave, se prepričajte, da mikro USB, ki ga uporabljate, ne podpira samo napajanja in podpira prenos podatkov.

To je moj prvi projekt Arduino in je primeren za začetnike.

1. korak: Izdelava prototipa nadzorne ploščice

Izdelava prototipov kontrolne ploščice
Izdelava prototipov kontrolne ploščice

Priporočam, da svoj program najprej preizkusite na plošči, preden začnete spajkati.

Tukaj si lahko ogledate mojo shemo.

Gumba 1 in 2 bosta Razveljavi in Ponovi, 3 do 5 sta za orodja Brush, Eraser in Lasso, gumb 6 je gumb za hitro shranjevanje. Dajalnik in merilnik dolžine nadzorujeta velikost in motnost.

Upoštevajte, da sem levičar in oblikoval postavitev na način, ki mi najbolj ustreza. Ta trenutek, ko uporabite svojo ploščico, si oglejte kot priložnost, da razmislite o tem, katere funkcije želite, da ima vaš krmilnik, kaj vam najbolj ustreza in sčasoma, če boste za to potrebovali dodatne dele.

Korak: Pritisnite gumbe

Potisni gumbi
Potisni gumbi

Gumbi so najpreprostejši za izvedbo. Oglejmo si kodo:

#vključi

const int gumbi = {2, 3, 4, 5, 6, 7, 8, 9}; // niz vseh zatičev gumbov char ctrlKey = KEY_LEFT_GUI; // uporabite to možnost za Windows in Linux: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// vnesite svojo nastavitveno kodo sem, da se enkrat zažene: Serial.begin (9600); Keyboard.begin (); // Gumbi - preglejte matriko in preverite, ali so pritisnjeni (int i = gumbi [0]; i <(velikostof (gumbi)/velikostof (gumbi [0]))+gumbi [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// gumbi za preverjanje in razveljavitev if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {vrne true; }} return false; } void doAction (int pin) {// izvedba stikala opravil (pin) {// ---- Bližnjice ---- // Razveljavitev črk 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Redo case 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Ohišje čopiča 6: Keyboard.press ('b'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Ohišje radirke 7: Keyboard.press ('e'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Primer Lasso 8: Keyboard.press ('l'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; // Shrani primer 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("vnos"); Serial.println (pin); zamuda (200); Keyboard.releaseAll (); prekiniti; privzeto: Keyboard.releaseAll (); prekiniti; }}

void loop () {

// vnesite svojo glavno kodo sem, da se zažene večkrat:

for (int i = gumbi [0]; i <sizeof (gumbi)/sizeof (gumbi [0])+gumbi [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Ponastavi modifikatorje Keyboard.releaseAll ();

}

So dokaj preprosti. Če želite, da računalnik prepozna pritisk tipke kot pritisk tipke, preprosto uporabimo funkcijo Keyboard.press (). Torej, da aktiviramo bližnjico za razveljavitev (ctrl+z), preprosto uporabimo Keyboard.press (ctrlKey) in nato Keyboard.press ('z'). Ne pozabite, da boste morali za dostop do teh funkcij vključiti Keyboard.h in inicializirati tipkovnico.

Vhodni zatiči so shranjeni v matriki, zato jih lahko preprosto prelistate v funkciji loop (). Enostaven način za dostop in dolžino matrike v c ++ z delitvijo velikosti celotne matrike z elementom matrike in enim elementom. Prelistamo vse gumbe, da preverimo, ali je bil pritisnjen.

Da bi bile stvari organizirane, sem vsa dejanja gumba shranil v stavek switch funkcije, ki za argument vzame številko pin.

Če želite, da vaši gumbi počnejo različne stvari, ali želite dodati več gumbov, preprosto uredite vsebino funkcije doAction!

Zaradi delovanja fizičnih gumbov jih bomo morali opustiti. S tem preprečite, da bi program prebral kakršne koli neželene pritiske, ki so posledica vzmetnosti tipk. Obstaja veliko načinov za to, vendar sem dodal preprosto funkcijo readButton (), ki skrbi za to.

Samo povežite svoje gumbe z 10K upori in morali bi biti zlati!

3. korak: Potenciometer

Potenciometer
Potenciometer

Zdaj pa na merilnik števcev:

#vključi

int izbiranje0 = 0; void setup () {// vnesite svojo nastavitveno kodo sem, da se enkrat zažene: Serial.begin (9600); Keyboard.begin (); // pokliče številko0 = analogRead (0); pokliči0 = zemljevid (pokliči0, 0, 1023, 1, 20); } void dialAction (int klicanje, int newVal, int lastVal) {stikalo (izbiranje) {// Primer motnosti 0: zakasnitev (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int enota = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("max dial 1"); } else {decim = constrain (decim, 0, 9); enota = omeji (enota, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+enota); }} pokliči0 = newVal; prekiniti; privzeto: break; }} // ------------------ GLAVNA ZANKA ------------------------- nična loop () {// vnesite svojo glavno kodo sem, da se večkrat zažene: // Opacity // delay (500); int val0 = analogRead (0); val0 = zemljevid (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Naredite nekaj dialAction (0, val0, dial0); }}

Merilnik poti sledi isti logiki, vendar je nekoliko bolj zapleteno.

Najprej poglejmo, kako želimo, da deluje: Photoshop ima nekaj priročnih bližnjic za spreminjanje neprosojnosti čopiča. Če pritisnete katero koli tipko num, bo motnost enaka številki*10. Če pa pritisnete dve številki, bo druga številka prebrana kot enota, kar vam omogoča natančnejši nadzor.

Zato želimo, da naš merilnik poti preslika rotacijo na odstotek, vendar tega ne želimo početi ves čas, saj bi bilo to neumno. Nejasnost želimo spremeniti le, ko merimo števec. Tako shranimo dodatno vrednost, ki jo primerjamo z vrednostjo analogRead () in zaženemo skript dejanja le, če je razlika.

Drugo vprašanje, s katerim se bomo srečali, je, kako pretvorimo povratni int analogRead kot vhod. Ker ni preprostega načina za pretvorbo int v niz, bomo morali uporabiti int sam. Če pa preprosto napišete Keyboard.press (int), boste opazili, da vnos ne bo tisto, kar ste želeli, in namesto tega bo pritisnjena druga tipka.

To je zato, ker so vsi ključi na tipkovnici kodirani kot cela števila, vsaka tipka ima svoj indeks. Če želite pravilno uporabiti ključ num, boste morali poiskati njihov indeks v tabeli ASCII:

Kot lahko vidite, se številske tipke začnejo pri indeksu 48. Torej, da pritisnemo pravilno tipko, moramo le dodati številčnico številki 48. Decimalna in enotna vrednost sta ločeni pritiski.

Nazadnje potrebujemo način, da vrednost ne bo skočila naprej in nazaj. Kajti, če poskusite uporabiti številčnico z zemljevidom (val0, 0, 1023, 0, 100), bodo rezultati zelo drhteči. Podobno kot smo odstranili gumbe, bomo to popravili tako, da bomo žrtvovali nekaj natančnosti. Ugotovil sem, da je preslikava na 1-20 in nato pomnoževanje vrednosti argumentov s 5 sprejemljiv kompromis.

Če želite priključiti potenciometer, samo priključite 5V žico, ozemljitveno žico in analogno vhodno žico in ne bi smelo biti težav.

Zabavno dejstvo: če uporabite to bližnjico, medtem ko je izbrano orodje, kot je Lasso, bo namesto tega spremenilo motnost plasti. Nekaj, kar je treba upoštevati.

4. korak: rotacijski dajalnik

Rotacijski dajalnik
Rotacijski dajalnik

Rotacijski dajalniki so nekoliko podobni potenciometrom, vendar brez omejitve, koliko se lahko obrnejo. Namesto analogne vrednosti bomo digitalno gledali smer obračanja dajalnika. Ne bom se spuščal v podrobnosti o tem, kako delujejo, vendar morate vedeti, da uporablja dva vhodna zatiča na arduinu, da pove, v katero smer se obrača. Z vrtljivim dajalnikom je lahko težje delati, različni dajalniki lahko zahtevajo različne nastavitve. Za lažjo stvar sem kupil eno s tiskanimi vezji, ki so pripravljeni za pritrditev z ženskimi zatiči. Zdaj koda:

#vključi

// rotacijski dajalnik #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// vnesite nastavitveno kodo sem, da se enkrat zažene: // rotacijski pinMode (outputA, INPUT); pinMode (outputB, INPUT); // bere začetno stanje outputA aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- void loop () {// vnesite svojo glavno kodo sem, da se večkrat zažene: // Velikost aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// števec ++; rotaryAction (1); } else {// števec -; rotaryAction (-1); } //Serial.print("Position: "); //Serial.println(števec); } aLastState = aState; }

Privzeto, bližnjice Photoshopa] in [povečajo in zmanjšajo velikost čopiča. Tako kot prej jih želimo vnesti kot pritisk tipk. Dajalnik pošlje število vhodov na obrat (kar je odvisno od modela), zato želimo povečati/zmanjšati velikost čopiča za vsakega od teh vhodov, tako da lahko številčnico zelo hitro obrnete navzgor ali navzdol, hkrati pa lahko tudi nadzirajte počasi z veliko natančnostjo.

Tako kot pri merilniku števcev želimo akcijo izvesti le, ko je gumb obrnjen. Za razliko od števca, kot sem že pojasnil, ima rotacijski dajalnik dva izmenična vhoda. Pogledamo, kaj se je od tega spremenilo, da ugotovimo smer, v kateri se obrne številčnica.

Nato glede na smer pritisnemo pravo tipko.

Dokler nimate težav s stikom, bi moralo delovati.

5. korak: Združite vse skupaj

Vse skupaj
Vse skupaj
Vse skupaj
Vse skupaj
Vse skupaj
Vse skupaj

Zdaj pa k spajkanju. Najprej izvrtamo dve luknji v ploščo, da se prilegata številčnicama. spajamo gumbe in njihove upore. Izvrtal sem dve dodatni majhni luknji, da pustimo vhodne žice na vrhu, da prihranimo prostor pod njimi, vendar to ni potrebno. Vhodnih žic ni veliko, zato žice GND in 5V potekata vzporedno, če pa se počutite zvijačno, boste morda želeli narediti matriko. Mikrokrmilnik sem spajkal na drugo, manjšo ploščo, ki se spodaj prilega poleg dajalnika in merilnika. Zdaj sem spajal vse žice na ProMicro. Ni treba biti ustvarjalen, le slediti sem moral isti shemi kot tista na deski, vendar je spajkanje na tako majhnem mestu razumljivo dolgočasno. Ne bodite kot jaz, uporabite odstranjevalec žice in dobro spajkanje!

Končno boste morda želeli narediti nov primer za svojega novega prijatelja iz Photoshopa. Vsaj ena boljša od moje!

Če pa želite poskusiti, uporabite karton in trak ter priključite mikro USB.

6. korak: Koda + demonstracija

Image
Image

Med premikanjem po projektu obvezno preizkusite program nadzorne ploščice, da se izognete presenečenjem!

Tu je celotna koda:

Najlepša hvala za branje!

Priporočena: