Turinys:

Mini valdymo pultas „Photoshop“(„Arduino“): 6 žingsniai
Mini valdymo pultas „Photoshop“(„Arduino“): 6 žingsniai

Video: Mini valdymo pultas „Photoshop“(„Arduino“): 6 žingsniai

Video: Mini valdymo pultas „Photoshop“(„Arduino“): 6 žingsniai
Video: Naujasis Komfovent C4.1 valdymo pultelis - vėdinimas pagal Jūsų poreikius (LT) 2024, Lapkritis
Anonim
Mini valdymo pultas „Photoshop“(„Arduino“)
Mini valdymo pultas „Photoshop“(„Arduino“)

Štai aš jums parodysiu, kaip sukurti nedidelį įrankį, kuris padėtų greičiau dirbti „Photoshop“!

Klaviatūros, specialiai sukurtos PS, nėra naujos, tačiau jos tiksliai nesiūlo to, ko man reikia. Kaip tapytojas, didžiąją laiko dalį „Photoshop“skiriu koreguojant teptuko nustatymus, ir manau, kad paprasti spartieji klavišai man nesuteikia galimybės valdyti darbo eigos. Taigi nusprendžiau pasigaminti savo klaviatūrą, mažą, nepastebimą ir su ratukais, kad galėčiau gauti tą analoginę sąveiką, kurios visada norėjau.

Tai veikia paprasta: kad mikrovaldiklis sąveikautų su „Photoshop“, mes naudojame numatytuosius sparčiuosius klavišus. Turėdami plokštę, kurią kompiuteris gali skaityti kaip klaviatūrą/pelę, viskas, ką turime padaryti, tai naudoti keletą paprastų kodo eilučių, kad kompiuteris lieptų kiekvieną įvestį skaityti kaip klavišų paspaudimų derinį. Dabar atšaukimo mygtukas yra tik vieno mygtuko paspaudimas!

Pradėkime! Šiam projektui jums reikės:

  • 1 „Sparkfun ProMicro“(arba „Arduino Leonardo“, nerekomenduojama)
  • 1 mikro USB adapteris
  • 6 mygtukai (arba bet koks jums patinkantis skaičius)
  • 10k omų rezistoriai (1 kiekvienam mygtukui)
  • 1 potenciometras
  • 1 sukamasis kodavimo įrenginys
  • laidai, duonos lenta, perforatorius, lydmetalis, antraštės kaiščiai ir kt.

Šiam projektui galite naudoti „Arduino Leonardo“, tačiau „ProMicro“yra daug pigesnė alternatyva, kuri naudoja tą patį atmega32u4 lustą, turi daugiau kaiščių ir yra daug mažesnės formos, todėl puikiai tinka klaviatūrai.

Norėdami užprogramuoti „ProMicro“„Arduino IDE“, pirmiausia turėsite nustatyti kai kuriuos dalykus. Daugiau apie tai galite perskaityti „SparkFun“vadove:

Jei jūsų kompiuteriui sunku rasti įrenginį, įsitikinkite, kad jūsų naudojamas „micro-USB“nėra tik maitinimo šaltinis ir palaiko duomenų perdavimą.

Tai mano pirmasis „Arduino“projektas ir tinka pradedantiesiems.

1 žingsnis: Valdymo skydelio prototipų kūrimas

Valdymo skydelio prototipų kūrimas
Valdymo skydelio prototipų kūrimas

Prieš pradėdami lituoti, rekomenduoju pirmiausia išbandyti savo programą ant duonos lentos.

Čia galite pamatyti mano schemą.

Mygtukai 1 ir 2 bus anuliuoti ir pakartoti, nuo 3 iki 5 skirti šepetėlio, trintuko ir laso įrankiams, 6 mygtukas yra greitas išsaugojimo mygtukas. Kodavimo įrenginys ir potmetras valdo atitinkamai dydį ir neskaidrumą.

Atkreipkite dėmesį, kad esu kairiarankis ir maketą sukūriau taip, kaip man patogiausia naudotis. Pamatykite momentą, kai naudojate savo duonos lentą, kaip galimybę pagalvoti, kokias funkcijas norėtumėte turėti valdiklyje, kas jums geriausiai tinka, ir galiausiai, ar jums reikės papildomų dalių.

2 žingsnis: Spauskite mygtukus

Mygtukai
Mygtukai

Mygtukai yra paprasčiausi įgyvendinti. Pažvelkime į kodą:

#įtraukti

const int mygtukai = {2, 3, 4, 5, 6, 7, 8, 9}; // visų mygtukų kaiščių masyvas char ctrlKey = KEY_LEFT_GUI; // naudokite šią parinktį „Windows“ir „Linux“: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// įdėkite čia savo sąrankos kodą, kad jis būtų paleistas vieną kartą: Serial.begin (9600); Klaviatūra.begin (); // Mygtukai - peržiūrėkite masyvą ir patikrinkite, ar nėra paspaudimų (int i = mygtukai [0]; i <(sizeof (mygtukai)/sizeof (mygtukai [0]))+mygtukai [0]; ++ i) { pinMode (i, INPUT); }} loginis skaitymasButton (int pin) {// patikrinti ir atleisti mygtukus, jei (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; } void doAction (int pin) {// atlikti užduočių jungiklį (PIN) {// ---- Nuorodos ---- // Anuliuoti 4 atvejį: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Atkurti 5 atvejį: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Šepečio dėklas 6: Keyboard.press ('b'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // 7 trintuko dėklas: Keyboard.press ('e'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Lasso atvejis 8: Keyboard.press ('l'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; // Išsaugoti 9 atvejį: Keyboard.press (ctrlKey); Keyboard.print ('s'); Serial.print („įvestis“); Serial.println (kaištis); vėlavimas (200); Keyboard.releaseAll (); pertrauka; numatytasis: Keyboard.releaseAll (); pertrauka; }}

void loop () {

// Įdėkite savo pagrindinį kodą čia, kad paleistumėte pakartotinai:

for (int i = mygtukai [0]; i <sizeof (mygtukai)/sizeof (mygtukai [0])+mygtukai [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Iš naujo nustatyti modifikatorius Keyboard.releaseAll ();

}

Jie yra gana paprasti. Norėdami, kad kompiuteris atpažintų mygtuko paspaudimą kaip klavišo paspaudimą, mes tiesiog naudojame „Keyboard.press“() funkciją. Taigi, norėdami suaktyvinti nuorodą „Anuliuoti“(„Ctrl“+z), mes tiesiog naudojame „Keyboard.press“(„ctrlKey“), tada „Keyboard.press“(„z“). Atminkite, kad turėsite įtraukti „Keyboard.h“ir inicijuoti klaviatūrą, kad galėtumėte naudotis šiomis funkcijomis.

Įvesties kaiščiai yra saugomi masyve, todėl galite lengvai juos perjungti naudodami funkciją loop (). Vienas paprastas būdas pasiekti masyvo ilgį c ++, padalijus viso masyvo dydį iš masyvo elemento ir dar vieno elemento. Mes einame per visus mygtukus, norėdami patikrinti, ar vienas buvo paspaustas.

Kad viskas būtų organizuota, visus savo mygtuko veiksmus išsaugojau funkcijos, kuri kaip argumentas naudoja PIN kodą, jungiklio teiginyje.

Jei norite, kad mygtukai atliktų skirtingus veiksmus arba norite pridėti daugiau mygtukų, tiesiog redaguokite „doAction“funkcijos turinį!

Dėl to, kaip veikia fiziniai mygtukai, turėsime juos panaikinti. Taip neleidžiama programai skaityti nepageidaujamų paspaudimų, kuriuos sukelia mygtukų spyruoklės. Yra daug būdų tai padaryti, bet aš pridėjau paprastą funkciją readButton (), kuri tuo pasirūpina.

Tiesiog sujunkite mygtukus su kai kuriais 10 000 rezistoriais ir turėsite būti auksiniai!

3 žingsnis: potenciometras

Potenciometras
Potenciometras

Dabar prie potmetro:

#įtraukti

int dial0 = 0; void setup () {// įdėkite čia savo sąrankos kodą, kad jis būtų paleistas vieną kartą: Serial.begin (9600); Klaviatūra.begin (); // Renkami dial0 = analogRead (0); dial0 = žemėlapis (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Neskaidrumo atvejis 0: uždelsimas (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int vienetas = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Klaviatūra. Rašyti (48+0); Serial.println ("maksimalus rinkimas 1"); } else {decim = apriboti (decim, 0, 9); vienetas = apriboti (vienetas, 0, 9); Serial.println (newVal*2); Keyboard.write (48+dešimtainė dalis); Keyboard.write (48+vienetas); }} dial0 = newVal; pertrauka; numatytasis: pertrauka; }} // ------------------ PAGRINDINĖ KILPĖ ------------------------- negalioja loop () {// čia įdėkite savo pagrindinį kodą, kad jis būtų paleistas pakartotinai: // Neskaidrumas // delay (500); int val0 = analogRead (0); val0 = žemėlapis (val0, 0, 1023, 1, 20); // Serijinis.spaudas ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Atlikite kažką dialAction (0, val0, dial0); }}

Potmetras laikosi tos pačios logikos, tačiau tai šiek tiek sudėtingiau.

Pirmiausia pažiūrėkime, kaip norime, kad jis veiktų: „Photoshop“turi keletą patogių nuorodų, leidžiančių pakeisti teptuko neskaidrumą. Jei paspausite bet kurį skaičių klavišą, neskaidrumas bus lygus šiam skaičiui*10. Bet jei paspausite du skaičius, antrasis skaičius bus perskaitytas kaip vienetas, todėl galėsite tiksliau valdyti.

Taigi norime, kad mūsų potmetras nustatytų jo sukimosi procentą, tačiau nenorime to daryti visą laiką, nes tai būtų kvaila. Mes norime pakeisti neskaidrumą tik tada, kai pasukamas puodų matuoklis. Taigi mes išsaugome papildomą vertę, kurią lyginame su analogRead () reikšme, ir vykdome veiksmų scenarijų tik tada, kai yra skirtumas.

Kita problema, su kuria susidursime, yra tai, kaip „analogRead“grąžą paversime įvestimi. Kadangi nėra lengvo būdo int paversti eilute, turėsime naudoti patį int. Tačiau jei tiesiog parašysite „Keyboard.press“(int), pastebėsite, kad įvestis bus ne tokia, kokios norėjote, o kitas mygtukas bus paspaustas.

Taip yra todėl, kad visi klaviatūros klavišai yra užkoduoti kaip sveikieji skaičiai, kiekvienas klavišas turi savo indeksą. Norėdami teisingai naudoti skaičių klavišą, turėsite ieškoti jų indekso ASCII lentelėje:

Kaip matote, skaičių klavišai prasideda nuo 48 rodyklės. Taigi, norėdami paspausti teisingą klavišą, mums tereikia pridėti ratuko reikšmę prie 48. Dešimtainės ir vienetinės vertės yra atskiri paspaudimai.

Galiausiai, mums reikia būdo, kaip išvengti vertės šoktelėjimo pirmyn ir atgal. Nes jei bandysite naudoti ratuką su žemėlapiu (val0, 0, 1023, 0, 100), rezultatai bus labai nervingi. Panašiai kaip mes išjungėme mygtukus, tai išspręsime paaukodami tam tikrą tikslumą. Radau, kad susiejimas su 1-20 ir tada dauginant argumentų vertę iš 5 yra priimtinas kompromisas.

Norėdami prijungti potenciometrą, tiesiog prijunkite 5 V laidą, įžeminimo laidą ir analoginį įvesties laidą ir neturėtų kilti jokių problemų.

Įdomus faktas: jei naudosite šį spartųjį klavišą pasirinkę tokį įrankį kaip „Lasso“, jis pakeis sluoksnio neskaidrumą. Į ką atkreipti dėmesį.

4 žingsnis: rotacinis kodavimo įrenginys

Rotacinis kodavimo įrenginys
Rotacinis kodavimo įrenginys

Sukamieji kodavimo prietaisai yra šiek tiek panašūs į potenciometrus, tačiau neribojami, kiek jie gali pasisukti. Vietoj analoginės vertės skaitmeniniu būdu žiūrėsime į kodavimo įrenginio sukimosi kryptį. Aš nesigilinsiu į tai, kaip jie veikia, tačiau jūs turite žinoti, kad jis naudoja du įvesties kaiščius ant arduino, kad nurodytų, kuria kryptimi jis pasukamas. Su rotaciniu kodavimo įrenginiu gali būti sudėtingiau dirbti, skirtingiems kodavimo įrenginiams gali prireikti skirtingų sąrankų. Kad būtų lengviau, nusipirkau vieną su PCB, kurios yra paruoštos užsikabinti su kaiščiais. Dabar kodas:

#įtraukti

// Rotacinis kodavimo įrenginys #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// įdėkite čia savo sąrankos kodą, kad paleistumėte vieną kartą: // Rotary pinMode (outputA, INPUT); pinMode (outputB, INPUT); // Skaito pradinę išvesties būseną a aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } else {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ PAGRINDINĖ KILPĖ ------------------------- tuščia kilpa () {// čia įdėkite pagrindinį kodą, kad jis būtų paleistas pakartotinai: // Dydis aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// skaitiklis ++; rotacinis veiksmas (1); } else {// skaitiklis -; rotacinis veiksmas (-1); } //Serijinis.printas ("Pozicija: "); // Serija.println (skaitiklis); } aLastState = aState; }

Pagal numatytuosius nustatymus „Photoshop“] ir [nuorodos padidina ir sumažina šepetėlio dydį. Kaip ir anksčiau, mes norime juos įvesti kaip klavišų paspaudimus. Kodavimo įrenginys siunčia daugybę įėjimų į vieną apsisukimą (tai priklauso nuo modelio), ir mes norime padidinti/sumažinti kiekvieno iš šių įvesties šepetėlio dydį, kad galėtumėte tikrai greitai pasukti ratuką aukštyn arba žemyn. labai lėtai valdykite jį.

Kaip ir naudojant potmetrą, mes norime atlikti veiksmą tik tada, kai sukamas ratukas. Skirtingai nuo potmetro, kaip jau paaiškinau anksčiau, rotacinis kodavimo įrenginys turi du kintamus įėjimus. Pažvelkime, kuris iš jų pasikeitė, kad būtų nustatyta kryptis, kuria sukamas ratukas.

Tada, priklausomai nuo krypties, paspaudžiame teisingą klavišą.

Kol neturite kontaktinių problemų, tai turėtų veikti.

5 žingsnis: sudėkite viską kartu

Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti

Dabar pereikite prie litavimo. Pirma, mes išgręžiame dvi skyles į perforatorių, kad tilptų du ratukai. lituojame mygtukus ir atitinkamus jų rezistorius. Aš išgręžiau dvi papildomas mažas skyles, kad įvesties laidai praeitų viršuje, kad sutaupytumėte vietos apačioje, tačiau tai nėra būtina. Įvesties laidų nėra daug, todėl GND ir 5 V laidai eina lygiagrečiai, tačiau jei jaučiatės gudrūs, galbūt norėsite sukurti matricą. Aš lituodavau mikrovaldiklį į kitą, mažesnę plokštę, kuri tilpo apačioje kartu su kodavimo įrenginiu ir potmetru. Dabar lituoju visus laidus prie „ProMicro“. Nereikia būti kūrybingam, aš tiesiog turėjau vadovautis ta pačia schema kaip ir duonos lentelėje, tačiau litavimas tokioje mažoje vietoje, suprantama, gali būti nuobodus. Nebūk toks kaip aš, naudok vielos nuėmiklį ir gerą lydmetalį!

Galiausiai, galbūt norėsite padaryti gražų dėklą savo naujam „Photoshop“bičiuliui. Bent vienas geresnis už mano!

Bet jei norite išbandyti, naudokite kartoną ir juostą ir prijunkite „micro-USB“.

6 žingsnis: kodas + demonstravimas

Image
Image

Eidami į projektą būtinai išbandykite valdymo pultelio programą, kad išvengtumėte netikėtumų!

Čia yra visas kodas:

Labai ačiū, kad skaitote!

Rekomenduojamas: