Sisukord:
- Samm: juhtpaneeli prototüüpimine
- Samm: vajutage nuppe
- Samm: potentsiomeeter
- 4. samm: pöörlev kodeerija
- Samm: pange see kõik kokku
- 6. samm: kood + tutvustus
Video: Mini Control Pad Photoshopi jaoks (Arduino): 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
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
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
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
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öö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
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
Proovige projektis liikudes kindlasti juhtimispuldi programmi, et vältida üllatusi!
Siin on täielik kood:
Suur tänu lugemise eest!
Soovitan:
Kerge värvimise algus (Photoshopi puudumine): 5 sammu (piltidega)
Valgusmaali algus (Photoshopi puudumine): ostsin hiljuti uue kaamera ja uurisin mõningaid selle funktsioone, kui leidsin Internetis heleda maali või pika säriajaga fotograafia. Enamik meist on näinud maanteelinnas fotoga valgusmaali põhivormi
Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu
Kasutage Arduino jaoks kuue nupu jaoks ühte analoogsisendit: olen sageli mõelnud, kuidas saaksin oma Arduino jaoks rohkem digitaalseid sisendeid. Hiljuti tuli mulle pähe, et peaksin saama kasutada ühte analoogsisendit mitme digitaalse sisendi toomiseks. Otsisin kiiresti ja leidsin, kus inimesed asuvad
Photoshopi pistikprogrammid GIMP -is: 6 sammu
Photoshopi pistikprogrammid GIMP -is: head päeva! Photoshopit peetakse sageli parimaks töölaua rastergraafika pilditöötlustarkvaraks turul, millel on mitu miljardit funktsiooni, rääkimata suurest hulgast võrgus ja jaemüügikohtades saadaval olevatest filtritest. Paljud graafikud
Lihtne taustapilt fotograafia ja kihtide segamise abil - Photoshopi õpetus: 5 sammu
Lihtne taustapilt fotograafia ja kihtide segamise abil - Photoshopi õpetus: tehke visuaalselt hämmastav tapeet, kasutades lihtsat tehnikat Photoshopis. Igaüks saab teha nii hea taustapildi ja selle palju lihtsamaks, kui arvate! Niisiis, kõigepealt minge kõigepealt faili ja gt; Uus Määrake oma laiuseks ja kõrguseks pikslid ning määrake th
Piltide jälgimine Photoshopi elementides 6: 6 sammu
Piltide jälgimine Photoshopi elementides 6: Selles juhendis näitan teile, kuidas mis tahes pilti jälgida ja muuta see nii, nagu oleksite selle visandanud. See on üsna lihtne ja kui soovite, saate seda üksikasjalikumalt muuta. Selleks vajate: 1. Photoshop Elements 6 (või mis tahes vormis fotosid