Mündəricat:

Photoshop üçün mini nəzarət yastığı (Arduino): 6 addım
Photoshop üçün mini nəzarət yastığı (Arduino): 6 addım

Video: Photoshop üçün mini nəzarət yastığı (Arduino): 6 addım

Video: Photoshop üçün mini nəzarət yastığı (Arduino): 6 addım
Video: Avara biriyəm, mənlə yaşama 2024, Noyabr
Anonim
Photoshop üçün mini idarəetmə paneli (Arduino)
Photoshop üçün mini idarəetmə paneli (Arduino)

Burada sizə Photoshop -da daha sürətli işləməyinizə kömək edəcək kiçik bir vasitə necə edəcəyinizi göstərəcəyəm!

Xüsusilə PS üçün hazırlanmış klaviatura yeni deyil, amma ehtiyacım olanı tam olaraq təqdim etmir. Bir rəssam olaraq, Photoshop -da keçirdiyim vaxtın çox hissəsi fırça parametrlərinin düzəldilməsinə sərf olunur və düşünürəm ki, sadə qısa düymələr iş axınımı uyğunlaşdırmaq üçün mənə nəzarət vermir. Buna görə kiçik, gözəgörünməz və hər zaman istədiyim analoji qarşılıqlı əlaqəni təmin etmək üçün zəngləri olan öz klaviaturamı düzəltmək qərarına gəldim.

İşləmə üsulu sadədir: mikrokontrolörün Photoshop ilə qarşılıqlı əlaqədə olması üçün standart qısa yollardan istifadə edirik. Kompüterin klaviatura/siçan kimi oxuya biləcəyi bir lövhə ilə, kompüterə hər bir girişi düymələrin birləşməsi kimi oxumasını söyləmək üçün bəzi sadə kod sətirlərindən istifadə etmək kifayətdir. İndi geri alma düyməsi yalnız bir düyməni basmaqdır!

Gəlin başlayaq! Bu layihə üçün sizə lazım olacaq:

  • 1 Sparkfun ProMicro (və ya Arduino Leonardo, tövsiyə edilmir)
  • 1 ədəd mikro USB adapter
  • 6 düymə (və ya istədiyiniz rəqəm)
  • 10k Ohm rezistorlar (hər düymə üçün 1 ədəd)
  • 1 potansiyometr
  • 1 dönər kodlayıcı
  • tellər, çörək taxtası, perfboard, lehim, başlıq pinləri və s.

Bu layihə üçün bir Arduino Leonardodan istifadə edə bilərsiniz, ancaq ProMicro eyni atmega32u4 çipini istifadə edən, daha çox sancağa malik olan və daha kiçik bir formada olan daha ucuz bir alternativdir ki, bu da klaviatura üçün mükəmməl edir.

ProMicro -nu Arduino IDE -də proqramlaşdırmaq üçün əvvəlcə bəzi şeyləri qurmalısınız. Bu barədə daha çox məlumatı SparkFun bələdçisində oxuya bilərsiniz:

Kompüteriniz cihazı tapmaqda çətinlik çəkirsə, istifadə etdiyiniz mikro USB-nin yalnız gücə malik olmadığından və məlumat ötürülməsini dəstəklədiyindən əmin olun.

Bu mənim ilk Arduino layihəmdir və yeni başlayanlar üçün uyğundur.

Addım 1: Nəzarət Padinin prototipləşdirilməsi

Nəzarət Padının prototipləşdirilməsi
Nəzarət Padının prototipləşdirilməsi

Lehimləməyə başlamazdan əvvəl proqramınızı çörək taxtasında sınamağı məsləhət görürəm.

Burada mənim sxemimi görə bilərsiniz.

1 və 2 düymələri Geri Al və Yenidən olacaq, 3 -dən 5 -ə qədər Fırça, Silgi və Kəmər alətləri üçündür, 6 -cı düymə sürətli Saxla düyməsidir. Enkoder və potmetr müvafiq olaraq Ölçü və Şəffaflığı idarə edir.

Nəzərə alın ki, solaxayam və planı istifadə etməyim üçün ən rahat şəkildə tərtib etmişəm. Çörək taxtasından istifadə etdiyiniz anı idarəedicinizin hansı funksiyalara sahib olmasını istədiyinizi, sizin üçün ən yaxşı işləyən və nəticədə bunu etmək üçün əlavə hissələrə ehtiyacınız olacağını düşünmək üçün bir fürsət olaraq baxın.

Addım 2: Düymələri basın

Düymələr
Düymələr

Düymələr tətbiq etmək üçün ən sadədir. Kodu nəzərdən keçirək:

#daxil edin

const int düymələri = {2, 3, 4, 5, 6, 7, 8, 9}; // bütün düymələr sancaqlar dizisi char ctrlKey = KEY_LEFT_GUI; // bu seçimi Windows və Linux üçün istifadə edin: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// bir dəfə işlətmək üçün quraşdırma kodunuzu bura qoyun: Serial.begin (9600); Keyboard.begin (); // Düymələr - sıra boyunca gəzin və (int i = düymələr [0]; i <(ölçü düymələri/ölçüsü (düymələr [0]))+düymələr [0]; ++ i) {düymələrini yoxlayın. pinMode (i, GİRİŞ); }} boolean readButton (int pin) {// (digitalRead (pin) == HIGH) {gecikdirmə (10) əgər düymələri yoxlayın və çıxarın. if (digitalRead (pin) == YÜKSƏK) {true true; }} false qaytar; } void doAction (int pin) {// tapşırıqları yerinə yetirin (pin) {// ---- Qısayollar ---- // Vəziyyəti 4-ə qaytar: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("giriş"); Serial.println (pin); gecikmə (200); Keyboard.releaseAll (); fasilə; // Case 5 -i təkrarlayın: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("giriş"); Serial.println (pin); gecikmə (200); Keyboard.releaseAll (); fasilə; // Fırça qutusu 6: Keyboard.press ('b'); Serial.print ("giriş"); Serial.println (pin); gecikmə (200); Keyboard.releaseAll (); fasilə; // Silgi işi 7: Keyboard.press ('e'); Serial.print ("giriş"); Serial.println (pin); gecikmə (200); Keyboard.releaseAll (); fasilə; // Lasso qutusu 8: Keyboard.press ('l'); Serial.print ("giriş"); Serial.println (pin); gecikmə (200); Keyboard.releaseAll (); fasilə; // Vəziyyəti 9 saxla: Keyboard.press (ctrlKey); Keyboard.print (lər); Serial.print ("giriş"); Serial.println (pin); gecikmə (200); Keyboard.releaseAll (); fasilə; default: Keyboard.releaseAll (); fasilə; }}

boşluq döngəsi () {

// əsas kodunuzu bura qoyun, təkrar işləsin:

for (int i = düymələr [0]; i <ölçüsü (düymələri)/ölçüsü (düymələri [0])+düymələri [0]; ++ i) {if (oxu düyməsi (i)) {doAction (i); }} // Modifikatorları sıfırlayın Keyboard.releaseAll ();

}

Kifayət qədər sadədirlər. Kompüterin bir düyməni basmasını düymə kimi tanımasını təmin etmək üçün sadəcə Keyboard.press () funksiyasından istifadə edirik. Geri Alma qısa yolunu (ctrl+z) aktivləşdirmək üçün sadəcə Keyboard.press (ctrlKey) və sonra Keyboard.press ('z') istifadə edirik. Unutmayın ki, bu funksiyalara daxil olmaq üçün Keyboard.h və klaviaturanı işə salmalısınız.

Giriş pinləri bir sıra olaraq saxlanılır, buna görə də hamısını loop () funksiyasından asanlıqla keçə bilərsiniz. Bütün cərgənin ölçüsünü serial elementinə, üstəgəl bir elementə bölməklə c ++ dilinə daxil olmaq və dizinin uzunluğuna daxil olmağın asan bir yolu. Bir düymənin basıldığını yoxlamaq üçün bütün düymələri gəzirik.

İşləri nizamlı saxlamaq üçün düymə hərəkətlərimin hamısını pin nömrəsini arqument kimi qəbul edən bir funksiyanın keçid ifadəsində saxladım.

Düymələrinizin fərqli şeylər etməsini istəyirsinizsə və ya daha çox düymə əlavə etmək istəyirsinizsə, doAction funksiyasının məzmununu redaktə edin!

Fiziki düymələrin necə işlədiyinə görə onları ləğv etməliyik. Bu, proqramın düymələrin yaylanmasının səbəb olduğu istenmeyen basmaları oxumasını maneə törətmək üçündür. Bunun bir çox yolu var, amma bununla məşğul olan sadə bir readButton () funksiyası əlavə etdim.

Düymələrinizi 10 kq rezistorla bağlayın və qızıl rəngə sahib olun!

Addım 3: Potansiyometr

Potansiyometr
Potansiyometr

İndi potmetrə keçək:

#daxil edin

int dial 0 = 0; void setup () {// bir dəfə işə salmaq üçün quraşdırma kodunuzu bura qoyun: Serial.begin (9600); Keyboard.begin (); // Dials dial0 = analogRead (0); dial0 = xəritə (dial0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (dial) {// Opacity case 0: delay (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int vahidi = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("maksimum yığım 1"); } else {decim = constrain (decim, 0, 9); vahid = məhdudlaşdır (vahid, 0, 9); Serial.println (newVal*2); Keyboard.write (48+decim); Keyboard.write (48+ədəd); }} dial0 = newVal; fasilə; standart: fasilə; }} // ------------------ MAIN LOOP ------------------------- boşdur loop () {// əsas kodunuzu bura qoyun, təkrar işləsin: // Opacity // delay (500); int val0 = analogRead (0); val0 = xəritə (val0, 0, 1023, 1, 20); //Serial.print ("dial0:"); //Serial.println(val0); if (val0! = dial0) {// Bir şey edin dialAction (0, val0, dial0); }}

Potmetr eyni məntiqə uyğundur, amma bir az hiyləgərdir.

Əvvəlcə bunun necə işləməsini istədiyimizə baxaq: Photoshop -un fırçanın qeyri -şəffaflığını dəyişdirmək üçün lazımlı qısa yolları var. Hər hansı bir rəqəm düyməsinə basarsanız, qeyri -şəffaflıq bu rəqəmə bərabər olacaq*10. Ancaq iki rəqəmə basarsanız, daha dəqiq bir idarəetmə verərək ikinci nömrəni vahid olaraq oxuyacaq.

Beləliklə, potmetrimizin fırlanma faizini bir faizlə müqayisə etməsini istəyirik, amma bunu hər zaman etmək istəmirik, çünki bu axmaqlıqdır. Şəffaflığı yalnız potmetr çevrildikdə dəyişdirmək istəyirik. Beləliklə, analogRead () dəyəri ilə müqayisə etdiyimiz əlavə bir dəyər saxlayırıq və yalnız bir fərq olduqda hərəkət skriptini işə salırıq.

Başa düşəcəyimiz başqa bir məsələ analogRead -in int intini giriş olaraq necə çevirəcəyimizdir. İnt -i simli hala gətirməyin asan bir yolu olmadığından int -in özünü istifadə etməli olacağıq. Ancaq sadəcə Keyboard.press (int) yazsanız, girişin istədiyiniz kimi olmayacağını və bunun əvəzinə başqa bir düyməyə basılacağını görəcəksiniz.

Bunun səbəbi, klaviatura düymələrinizin hamısı tam ədəd kimi kodlaşdırılmasıdır, hər bir açarın öz indeksi var. Nüm düyməsini düzgün istifadə etmək üçün indekslərini ASCII cədvəlində axtarmalı olacaqsınız:

Gördüyünüz kimi, num düymələri indeks 48 -dən başlayır. Buna görə də düzgün düyməni basmaq üçün yığmağın dəyərini 48 -ə əlavə etmək kifayətdir. Ondalık və vahid dəyərləri ayrı -ayrı düymələrdir.

Nəhayət, dəyərin irəli -geri sıçramaması üçün bir yola ehtiyacımız var. Çünki xəritədə (val0, 0, 1023, 0, 100) olan kadrdan istifadə etməyə çalışsanız, nəticələrin çox həyəcanlı olduğunu görəcəksiniz. Eynilə düymələri necə çıxardıqsa, bir az dəqiqliyi qurban verərək bunu düzəldəcəyik. Tapdım ki, 1-20 aralığında xəritələşməyin və sonra arqumentlərin dəyərinin 5 ilə vurulmasının məqbul bir güzəşt olduğunu gördüm.

Potansiyometrini bağlamaq üçün 5V tel, topraklama teli və analoq giriş telini bağlamaq kifayətdir və heç bir problem olmamalıdır.

Əyləncəli fakt: Kəmər kimi bir alət seçilərkən bu qısa yoldan istifadə etsəniz, bunun əvəzinə Layerin qeyri -şəffaflığını dəyişəcək. Nəzərə alınmalı bir şey.

Addım 4: Rotary Encoder

Rotary Encoder
Rotary Encoder

Rotary kodlayıcılar bir az potensiometrlərə bənzəyir, lakin nə qədər dönə bildikləri məhdudiyyətsizdir. Analoq bir dəyər əvəzinə, rəqəmsal olaraq kodlayıcının dönüş istiqamətinə baxacağıq. Bunların necə işlədiyinə dair çox ətraflı məlumat verməyəcəyəm, ancaq bilməlisiniz ki, arduinonun hansı istiqamətə döndüyünü söyləmək üçün iki giriş sancağından istifadə edir. Döner kodlayıcı ilə işləmək daha çətin ola bilər, fərqli kodlayıcılar fərqli qurğular tələb edə bilər. İşləri asanlaşdırmaq üçün, dişi sancaqlar ilə bağlamağa hazır olan PCB ilə birini aldım. İndi kod:

#daxil edin

// Rotary encoder #define outputA 15 #define outputB 14 int counter = 0; int aState; int aLastState; void setup () {// bir dəfə işlətmək üçün quraşdırma kodunuzu bura qoyun: // Rotary pinMode (outputA, INPUT); pinMode (çıxışB, GİRİŞ); // çıxışın ilkin vəziyyətini oxuyur aLastState = digitalRead (outputA); } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } başqa {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ MAIN LOOP ------------------------- boşluq döngəsi () {// əsas kodunuzu bura qoyun, təkrar işləsin: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } başqa {// sayğac -; rotaryAction (-1); } //Serial.print("Mövqe: "); //Serial.println(sayğac); } aLastState = aState; }

Varsayılan olaraq, Photoshop -un] və [qısa yolları fırça ölçüsünü artırır və azaldır. Eynilə əvvəl olduğu kimi, bunları düymələr kimi daxil etmək istəyirik. Enkoder növbə ilə bir çox giriş göndərir (bu, modeldən asılıdır) və biz bu girişlərin hər biri üçün fırça ölçüsünü artırmaq/azaltmaq istəyirik, buna görə də kadrı həqiqətən yuxarı və ya aşağı çevirə bilərsiniz, həm də yavaş -yavaş böyük bir dəqiqliklə idarə edin.

Necə ki, potmetrdə olduğu kimi, hərəkəti yalnız kadr çevirilərkən yerinə yetirmək istəyirik. Potmetrdən fərqli olaraq, əvvəllər izah etdiyim kimi, fırlanan kodlayıcı iki dəyişən girişə malikdir. Düymənin hansı istiqamətə yönəldiyini müəyyən etmək üçün bunlardan hansının dəyişdiyini görürük.

Sonra istiqamətdən asılı olaraq düzgün düyməni basırıq.

Əlaqə probleminiz olmadığı müddətcə işləməlidir.

Addım 5: Hamısını bir yerə yığın

Hamısını bir araya gətirmək
Hamısını bir araya gətirmək
Hamısını bir araya gətirmək
Hamısını bir araya gətirmək
Hamısını bir araya gətirmək
Hamısını bir araya gətirmək

İndi lehimə keçək. Birincisi, pervanenin taxtasına iki düyməni uyğunlaşdırmaq üçün iki delik qazırıq. düymələri və onların müvafiq rezistorlarını lehimləyirik. Aşağıdakı yerə qənaət etmək üçün giriş tellərinin üstündən keçməsinə icazə vermək üçün iki əlavə kiçik deşik qazdım, amma bu lazım deyil. GND və 5V telləri paralel olaraq işlədiyi üçün bir çox giriş telləri yoxdur, ancaq özünüzü hiyləgər hiss edirsinizsə, matris etmək istəyə bilərsiniz. Mikro nəzarətçini kodlayıcının və potmetrin altına uyğun olan daha kiçik, daha kiçik bir taxtaya lehimlədim. İndi bütün telləri ProMicro -ya lehimləyirəm. Yaradıcılığa ehtiyac yoxdur, sadəcə çörək taxtasındakı sxemə uyğun hərəkət etməli idim, amma belə kiçik bir yerdə lehimləmə başa düşmək çətin ola bilər. Mənim kimi olmayın, bir tel soyucu və yaxşı bir lehim istifadə edin!

Nəhayət, yeni Photoshop dostunuz üçün gözəl bir çanta hazırlamaq istəyə bilərsiniz. Heç olmasa mənimkindən daha yaxşı!

Ancaq sınamaq istəsəniz, bir az karton və lent istifadə edin və mikro USB-ni qoşun.

Addım 6: Kod + Nümayiş

Image
Image

Sürprizlərin qarşısını almaq üçün layihə boyunca hərəkət edərkən nəzarət panelinin proqramını sınadığınızdan əmin olun!

Tam kod budur:

Oxuduğunuz üçün çox sağ olun!

Tövsiyə: