Sisukord:

Mini Control Pad Photoshopi jaoks (Arduino): 6 sammu
Mini Control Pad Photoshopi jaoks (Arduino): 6 sammu

Video: Mini Control Pad Photoshopi jaoks (Arduino): 6 sammu

Video: Mini Control Pad Photoshopi jaoks (Arduino): 6 sammu
Video: PLAYSTATION - ТЕЛЕФОН! 2024, November
Anonim
Mini Control Pad Photoshopi jaoks (Arduino)
Mini Control Pad Photoshopi jaoks (Arduino)

Siin näitan teile, kuidas teha väike tööriist, mis aitab teil Photoshopis kiiremini töötada!

Spetsiaalselt PS jaoks loodud klaviatuurid ei ole uued, kuid need ei paku täpselt seda, mida ma vajan. Maalikunstnikuna kulub suur osa minu ajast Photoshopis pintsli seadistuste kohandamisele ja ma arvan, et lihtsad kiirklahvid ei anna mulle kontrolli minu töövoo järgi. Seega otsustasin teha oma klaviatuuri, väikese ja märkamatu ning millel on sihverplaadid, et anda mulle analoogne suhtlus, mida olen alati soovinud.

Tööpõhimõte on lihtne: et mikrokontroller saaks Photoshopiga suhelda, kasutame vaikimisi otseteid. Tahvli puhul, mida arvuti saab klaviatuuri/hiirena lugeda, peame vaid kasutama mõnda lihtsat koodirida, mis käsib arvutil lugeda iga sisendit klahvivajutuste kombinatsioonina. Nüüd on tagasivõtmisnupp vaid nupuvajutuse kaugusel!

Alustame! Selle projekti jaoks vajate:

  • 1 Sparkfun ProMicro (või Arduino Leonardo, pole soovitatav)
  • 1 mikro-USB-adapter
  • 6 nuppu (või mis tahes number, mis teile meeldib)
  • 10 kΩ takistid (1 iga nupu kohta)
  • 1 potentsiomeeter
  • 1 pöörlev kodeerija
  • juhtmed, leivaplaat, perfboard, joodis, päise tihvtid jne.

Selle projekti jaoks saate kasutada Arduino Leonardot, kuid ProMicro on palju odavam alternatiiv, mis kasutab sama atmega32u4 kiipi, millel on rohkem tihvte ja mis on palju väiksemas vormis, mistõttu on see ideaalne klaviatuuri jaoks.

ProMicro programmeerimiseks Arduino IDE -s peate võib -olla kõigepealt mõned asjad seadistama. Lisateavet selle kohta saate lugeda SparkFuni juhendist:

Kui teie arvutil on seadme leidmisega probleeme, veenduge, et kasutatav mikro-USB pole ainult toiteallikas ja toetab andmeedastust.

See on minu esimene Arduino projekt ja sobib algajatele.

Samm: juhtpaneeli prototüüpimine

Juhtpadi prototüüpimine
Juhtpadi prototüüpimine

Soovitan enne jootmise alustamist oma programmi testida leivaplaadil.

Siin näete minu skeemi.

Nupud 1 ja 2 on Undo ja Redo, 3 kuni 5 on pintsli, kustutuskummi ja lasso tööriistade jaoks, nupp 6 on kiire salvestamise nupp. Kodeerija ja potimeeter reguleerivad vastavalt suurust ja läbipaistmatust.

Pange tähele, et olen vasakukäeline ja kujundasin paigutuse nii, nagu mul on kõige mugavam kasutada. Vaadake hetke, mil kasutate oma leivaplaati, võimalust mõelda, milliseid funktsioone soovite oma kontrolleril täita, mis teie jaoks kõige paremini sobib ja lõpuks, kas vajate selle valmistamiseks täiendavaid osi.

Samm: vajutage nuppe

Vajutage nuppe
Vajutage nuppe

Nuppe on kõige lihtsam rakendada. Vaatame koodi:

#kaasake

const int nupud = {2, 3, 4, 5, 6, 7, 8, 9}; // kõikide nuppude massiiv char ctrlKey = KEY_LEFT_GUI; // kasutage seda suvandit Windowsi ja Linuxi jaoks: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// pange oma seadistuskood siia, et seda korra käivitada: Serial.begin (9600); Klaviatuur.begin (); // Nupud - vaadake massiivi läbi ja kontrollige (int i = nupud [0]; i <(sizeof (nupud)/sizeof (nupud [0]))+nupud [0]; ++ i) { pinMode (i, INPUT); }} boolean readButton (int pin) {// kontrollige ja tühistage nupud if (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// ülesannete täitmine (pin) {// ---- Otseteed ---- // Undo case 4: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("sisend"); Serial.println (tihvt); viivitus (200); Keyboard.releaseAll (); murda; // Korda juhtumit 5: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("sisend"); Serial.println (tihvt); viivitus (200); Keyboard.releaseAll (); murda; // Pintsliümbris 6: Keyboard.press ('b'); Serial.print ("sisend"); Serial.println (tihvt); viivitus (200); Keyboard.releaseAll (); murda; // Kustutuskummi ümbris 7: Keyboard.press ('e'); Serial.print ("sisend"); Serial.println (tihvt); viivitus (200); Keyboard.releaseAll (); murda; // Lasso juhtum 8: Keyboard.press ('l'); Serial.print ("sisend"); Serial.println (tihvt); viivitus (200); Keyboard.releaseAll (); murda; // Salvesta juhtum 9: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print ("sisend"); Serial.println (tihvt); viivitus (200); Keyboard.releaseAll (); murda; vaikimisi: Keyboard.releaseAll (); murda; }}

void loop () {

// pange oma põhikood siia korduvaks käitamiseks:

for (int i = nupud [0]; i <sizeof (nupud)/sizeof (nupud [0])+nupud [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Lähtesta modifikaatorid Keyboard.releaseAll ();

}

Nad on üsna otsekohesed. Selleks, et arvuti tuvastaks nupuvajutuse klahvivajutusena, kasutame lihtsalt funktsiooni Keyboard.press (). Nii et tagasivõtmise otsetee (ctrl+z) aktiveerimiseks kasutame lihtsalt Keyboard.press (ctrlKey) ja seejärel Keyboard.press ('z'). Pidage meeles, et nende funktsioonide kasutamiseks peate lisama klaviatuuri.h ja lähtestama klaviatuuri.

Sisestusnõelad on salvestatud massiivi, nii et saate neid kõiki hõlpsalt loop () funktsioonis loopida. Üks lihtne viis massiivi pikkusele (c ++) juurde pääsemiseks ja massiivi pikkuse jagamiseks massiivi elemendiga, millele lisandub üks element. Me vaatame läbi kõik nupud, et kontrollida, kas ühte on vajutatud.

Asjade organiseerimiseks hoidsin kõik oma nupu toimingud funktsiooni lüliti avalduses, mis võtab PIN -koodi argumendina.

Kui soovite, et teie nupud teeksid erinevaid asju või soovite lisada rohkem nuppe, muutke lihtsalt funktsiooni doAction sisu!

Füüsiliste nuppude tööpõhimõtte tõttu peame need tühistama. Selle eesmärk on takistada programmil lugeda soovimatuid vajutusi, mis on põhjustatud nuppude vetruvusest. Selleks on palju viise, kuid lisasin lihtsa funktsiooni readButton (), mis selle eest hoolitseb.

Lihtsalt ühendage oma nupud mõne 10k takistiga ja peaksite olema kuldne!

Samm: potentsiomeeter

Potentsiomeeter
Potentsiomeeter

Nüüd potimeetri juurde:

#kaasake

int dial0 = 0; void setup () {// pange oma seadistuskood siia, et seda korra käivitada: Serial.begin (9600); Klaviatuur.begin (); // Valib dial0 = analogRead (0); dial0 = kaart (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Läbipaistmatuse juhtum 0: viivitus (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int ühik = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Klaviatuur.kirjutamine (48+0); Serial.println ("max dial 1"); } else {kümnendus = piira (kümnend, 0, 9); ühik = piirata (ühik, 0, 9); Serial.println (newVal*2); Keyboard.write (48+kümnendkoht); Keyboard.write (48+ühik); }} dial0 = newVal; murda; vaikimisi: murda; }} // ------------------ PÕHISILM ------------------------- tühine loop () {// pane siia oma põhikood, et seda korduvalt käitada: // Läbipaistmatus // delay (500); int val0 = analogRead (0); val0 = kaart (val0, 0, 1023, 1, 20); //Seria.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Tehke midagi dialAction (0, val0, dial0); }}

Potmeeter järgib sama loogikat, kuid see on natuke keerulisem.

Kõigepealt vaatame, kuidas me tahame, et see toimiks: Photoshopis on mõned käepärased otseteed pintsli läbipaistmatuse muutmiseks. Kui vajutate suvalist numbriklahvi, on läbipaistmatus võrdne selle numbriga*10. Kuid kui vajutate kahte numbrit, loeb see teise numbri ühikuna, andes teile täpsema juhtimise.

Nii et me tahame, et meie potimeeter kaardistaks selle pöörlemise protsendini, kuid me ei taha seda kogu aeg teha, sest see oleks rumal. Soovime muuta läbipaistmatust ainult potimeetri pööramisel. Seega salvestame lisaväärtuse, mida võrdleme väärtusega analogRead (), ja käivitame tegevusskripti ainult siis, kui see on erinev.

Teine probleem, millega me kokku puutume, on see, kuidas me muudame analogRead'i tagastamise int sisendiks. Kuna int -i stringiks muutmiseks pole lihtsat viisi, peame kasutama int -i ennast. Kui aga kirjutate lihtsalt Keyboard.press (int), märkate, et sisend ei ole see, mida soovisite, ja selle asemel vajutatakse mõnda muud klahvi.

Seda seetõttu, et teie klaviatuuri klahvid on kodeeritud täisarvudena, igal klahvil on oma indeks. Numbriklahvi õigeks kasutamiseks peate otsima nende indeksi ASCII tabelist:

Nagu näete, algavad numbriklahvid indeksist 48. Nii et õige klahvi vajutamiseks ei pea me muud tegema kui lisama valiku väärtuse 48. Koma- ja ühikuväärtused on eraldi vajutused.

Lõpuks vajame viisi, kuidas hoida väärtust edasi -tagasi hüppamast. Sest kui proovite kasutada valijat koos kaardiga (val0, 0, 1023, 0, 100), leiate, et tulemused on väga närvilised. Sarnaselt nuppude tühistamisega lahendame selle, ohverdades osa täpsusest. Leidsin, et selle kaardistamine 1-20-ni ja argumentide väärtuse korrutamine 5-ga on vastuvõetav kompromiss.

Potentsiomeetri ühendamiseks ühendage lihtsalt 5 V juhe, maandusjuhe ja analoog sisendkaabel ning probleeme ei tohiks tekkida.

Naljakas fakt: kui kasutate seda otseteed sellise tööriista nagu Lasso valimisel, muudab see hoopis kihi läbipaistmatust. Midagi, mida tähele panna.

4. samm: pöörlev kodeerija

Pöörlev kodeerija
Pöörlev kodeerija

Pöörlevad kodeerijad sarnanevad veidi potentsiomeetritega, kuid ilma piiranguteta, kui palju nad võivad pöörata. Analoogväärtuse asemel vaatame kodeerija pöördesuunda digitaalselt. Ma ei süvene nende toimimise üksikasjadesse, kuid peate teadma, et see kasutab arduino kahte sisendnõela, et öelda, mis suunas seda pööratakse. Pöörleva kodeerijaga töötamine võib olla keerulisem, erinevad kodeerijad võivad vajada erinevaid seadistusi. Asja hõlbustamiseks ostsin ühe PCB -ga, mis on valmis emaste tihvtidega haakimiseks. Nüüd kood:

#kaasake

// Pöördkodeerija #define outputA 15 #define outputB 14 int counter = 0; int aRiik; int aLastState; void setup () {// pange oma seadistuskood siia, et seda korra käivitada: // Rotary pinMode (outputA, INPUT); pinMode (väljundB, INPUT); // Loeb väljundi algseisundit a aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ PÕHISILM ------------------------ void loop () {// pange oma põhikood siia korduvaks käitamiseks: // Suurus aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } muu {// loendur -; rotaryAction (-1); } //Seriaalneprint ("Position: "); //Seriaalne.println (loendur); } aViimaseisund = aRiik; }

Vaikimisi suurendavad ja vähendavad pintsli suurust Photoshopi] ja [otseteed. Nagu varemgi, tahame need sisestada klahvivajutustena. Kodeer saadab käigu kohta mitmeid sisendeid (mis sõltub mudelist) ja me tahame iga nende sisendi jaoks pintsli suurust suurendada/vähendada, nii et saate valijat tõesti kiiresti üles või alla pöörata, kuid saate ka kontrollige seda aeglaselt suure täpsusega.

Nii nagu potomeetri puhul, tahame toimingut käivitada ainult siis, kui ketast keeratakse. Erinevalt potomeetrist, nagu ma eelnevalt selgitasin, on pöördkooderil kaks vahelduvat sisendit. Me vaatame, milline neist on muutunud, et teha kindlaks sihiku keeramise suund.

Seejärel vajutame sõltuvalt suunast õiget klahvi.

Niikaua kui teil pole kontaktprobleeme, peaks see toimima.

Samm: pange see kõik kokku

Kõike kokku panema
Kõike kokku panema
Kõike kokku panema
Kõike kokku panema
Kõike kokku panema
Kõike kokku panema

Nüüd jootmise juurde. Esiteks puurime perfboardi kaks auku, et need sobiksid kahe kettaga. me jootame nupud ja nende vastavad takistid. Puurisin kaks ekstra väikest auku, et lasta sisendjuhtmetel altpoolt ruumi kokku hoida, kuid see pole vajalik. Sisendkaableid pole palju, nii et GND ja 5V juhtmed töötavad paralleelselt, kuid kui tunnete end kavalalt, võiksite teha maatriksi. Jootsin mikrokontrolleri teisele väiksemale perfboardile, mis mahtus alla kodeerija ja potomeetri kõrvale. Nüüd jootan kõik juhtmed ProMicro külge. Pole vaja olla loominguline, pidin lihtsalt järgima sama skeemi nagu leivaplaadil, kuid jootmine nii väikeses kohas võib arusaadavalt tüütu olla. Ära ole nagu mina, kasuta traadist eemaldajat ja head jootet!

Lõpuks võiksite oma uuele Photoshopi sõbrale kena ümbrise teha. Vähemalt üks parem kui minu oma!

Aga kui soovite seda proovida, kasutage pappi ja linti ning ühendage oma mikro-USB.

6. samm: kood + tutvustus

Image
Image

Proovige projektis liikudes kindlasti juhtimispuldi programmi, et vältida üllatusi!

Siin on täielik kood:

Suur tänu lugemise eest!

Soovitan: