Mündəricat:

Əl Qısayol Nəzarətçisi (Photoshop + Daha çox üçün) [Arduino]: 4 Addım
Əl Qısayol Nəzarətçisi (Photoshop + Daha çox üçün) [Arduino]: 4 Addım

Video: Əl Qısayol Nəzarətçisi (Photoshop + Daha çox üçün) [Arduino]: 4 Addım

Video: Əl Qısayol Nəzarətçisi (Photoshop + Daha çox üçün) [Arduino]: 4 Addım
Video: Telefon ustaları bu özəlliyi heç vaxt sizə deməz 2024, Iyul
Anonim
Əl Qısayol Nəzarətçisi (Photoshop + Daha çoxu üçün) [Arduino]
Əl Qısayol Nəzarətçisi (Photoshop + Daha çoxu üçün) [Arduino]

Son dəfə Photoshop -da istifadə etmək üçün kiçik bir idarəetmə paneli yaratdım. Möcüzələr yaratdı və hələ də istifadə edirəm! Ancaq kifayət qədər məhduddur, yalnız beş düymə və faydalı ölçüsü və qeyri -şəffaf yığımları ilə. Hələ də klaviatura üçün çox uzandığımı gördüm …

Beləliklə, daha çox düymələri və funksionallığı olan idarəetmə panelinin növbəti iterasiyası üzərində işə başladım. Hamısını idarə etmək üçün bir nəzarət paneli.

Bu nəzarət paneli deyil. AMMA bir şəkildə daha yaxşı ola bilər.

Bir ton qısa yolunuz olsaydı, amma çox rahat və yüngül bir paketdə fasiləsiz çəkərkən sərbəst əlinizlə tuta bilərsiniz? … tamam, infomercial ilə kifayətləndim.

Bu nəzarətçi, yalnız 4 düymə ilə 32 mümkün qısayolla eşlenebilecek şekilde programlanmıştır! Əlavə 5-ci düymə, bir çox proqramlar üçün faydalı olan hər hansı bir kombinasiyada dəyişdirici düymələrdən istifadə etməyimə icazə vermək üçün mövcuddur (heç Alt-RMB kombinasiyasını PS-də sınamısınızmı? Əgər yoxsa, zəhmət olmasa edin. Bu bir xilaskardır). Sistemi daha sonra izah edəcəyəm.

Bütün bunları etmək üçün sizə lazım olacaq:

  • 1 Mikro nəzarətçi (Adafruit ItsyBitsy 32u4 istifadə etdim, amma atmega32u4 çipi olduğu müddətdə hər kəs bunu etməlidir)
  • 1 micro-USB adapteri (məlumat, yalnız güc üçün deyil)
  • 5 düymə (belə yumşaq düymələrdən istifadə etdim)
  • 10k Ohm rezistorlar (hər düyməyə 1 ədəd)
  • Tellər, çörək taxtası, lehim materialı və s.
  • Qutu hazırlamaq üçün bir şey (3D printer və s.)

Bu orta səviyyəli bir Arduino layihəsidir və baş verənləri daha yaxşı başa düşmək üçün keçmiş dərsimə baxmağı təklif edirəm, çünki bunların çoxu orada izah etdiyim şeylərin təkrarıdır.

Tamam, başlayaq!

Addım 1: Planlaşdırma

Planlaşdırma
Planlaşdırma

Bu nəzarətçinin çəkdiyim əsas bir sxemdir. Əvvəlki proyektimlə müqayisə etdiyiniz zaman dövrə çox sadədir! Ancaq bir neçə düymə ilə, kombinə edilmiş preslərin gücü ilə daha çox iş görə biləcəyik!

İdarəetmə sxeminin arxasındakı fikir, hər bir düymənin ya sərbəst, basılıb sərbəst buraxıla biləcəyi, ya da basılıb tutula biləcəyidir. Düymələri basıb saxlamaqla fərqli qısayollara daxil olacağıq. Yalnız A düyməsini basarsanız, A qısa yolunu aktivləşdirəcəksiniz, ancaq A düyməsini basarkən B düyməsini basıb saxlasanız fərqli bir qısa yol alacaqsınız. Basıldıqda eyni anda 3 düyməni basıb saxlaya bilərsiniz, buna görə də bir neçə əsas kombinatoriya tətbiq etdikdə bu sistemlə neçə kombinasiyanın mümkün olduğunu görəcəksiniz!

Əlavə beşinci düymə, gəldiyim əlin şəklini nəzərə alaraq təbii bir əlavə kimi hiss etdi. Photoshopdakı dəyişdirici düymələrə daxil olmaq üçün istifadə etmək qərarına gəldim. İşləmə üsulu digər düymələrdən bir qədər fərqlidir: baş barmaq düyməsini basıldıqda yalnız dəyişdiricilər istifadə olunacaq. Bunlar tutulduqda aktiv olacaq və birdən çox basıla bilər. Beləliklə, əgər A düyməsi Shift və B düyməsi Ctrl olarsa, A və B düymələrini basılı tutduğunuz zaman həm Shift, həm də Ctrl düymələrini basmış kimi olacaqsınız, ancaq baş barmaq düyməsini basıb saxlayın!

Qabıq həm erqonomik, həm də birmənalı olmayacaq şəkildə dizayn edilmişdir. Kiçik barmağımın çox yorucu olmaması üçün əllərimin məndən daha böyük olması üçün işləməsi üçün çox diqqətlə oturdum.

Addım 2: Prototip + Kod

Prototip + Kod
Prototip + Kod

Çörək taxtasındakı düymələri sınamaq yaxşı bir təcrübədir. Çox sadədir, düymələri və rezistorları göstərildiyi kimi bağlayın. Buradakı kodla sınaya bilərsiniz (pastebin link alternativi):

#daxil edin

// MacOS üçün vthisv seçimindən istifadə edin:

// char ctrlKey = KEY_LEFT_GUI;

// Windows və Linux üçün vthisv seçimindən istifadə edin:

char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;

// İş düymələri burada

char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;

const int sancaqlar = {9, 10, 11, 12, 13}; // bütün düymə sancaqlarının bir sıra

// Həssaslıq

const int THRESH_0 = 10; const int THRESH_1 = 20; const int THRESH_2 = 25; const int THRESH_3 = 50; const int THRESH_4 = 100; const int THRESH_5 = 200;

const int BUTTON_NUM = 5;

// Çərçivələri dondur

const int DELAY = 0;

enum Dövlətlər {azad edilmiş, sıxılmış, saxlanılmış, azad edilmiş};

struktur düyməsi {

int pin; Dövlətlər dövləti; int timeHeld; }; // baş barmaq, indeks, orta, üzük, kiçik;

düymə düymələri [BUTTON_NUM] = {};

initButton düyməsi (int p) {

b düyməsi; pinMode (p, GİRİŞ); b.pin = p; b.dövlət = Dövlətlər:: azad edildi; b.timeHeld = 0; qayıt b; }

boş quraşdırma () {

// quraşdırma kodunuzu buraya qoyun, bir dəfə işləsin: Serial.begin (9600); Keyboard.begin ();

while (! Serial) {};

// (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("set button") üçün düymələr; Serial. çap (i); Serial.print ("pin:"); Serial.println (sancaqlar ); // düymələr . pin = 1; düymələr = initButton (sancaqlar ); Serial.println (düymələr . Pin); }

}

bool readButton (int pin) {

// yoxlamaq və çıxarmaq düymələri əgər (digitalRead (pin) == YÜKSEK) {gecikmə (10); if (digitalRead (pin) == YÜKSƏK) {true true; }} false qaytar; }

int pintobin (int pin) {

əgər (pin == sancaqlar [0]) 1 qaytar; əgər (pin == sancaqlar [1]) 10 qaytar; əgər (pin == sancaqlar [2]) 100 qaytarsa; if (pin == sancaqlar [3]) 1000 qaytar; if (pin == sancaqlar [4]) 10000 qaytar; } düymə düyməsiStateUpdate (düymə b) {

bool press = readButton (b.pin);

keçid (b.dövlət) {halda Ştatları:: azad: b.timeHeld = 0; əgər (basın) b.state = Ştatlar:: basıldı; fasilə; halda basıldı: b.timeHeld+= 1; əgər (basın) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: keçirilib; }} başqa {// if (b.timeHeld

int getButtonStateCode (b düyməsi)

{qayıt b.dövlət*pintobin (b.pin); }

int getCodeByButton (int kodu, int indeksi) {

int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeks);

// ilk əməliyyat

əgər (opStep == 0) qaytarma kodu/10000; r1 = kod%10000;

əgər (opStep == 1)

qaytarma r1/1000; r2 = r1%1000; əgər (opStep == 2) r2/100 qaytar; r3 = r2%100; əgər (opStep == 3) r3/10 qaytar; r4 = r3%10; əgər (opStep == 4) r4/1 qaytar; r5 = r4%1; }

void completePress (int pin) {

// Serial.print ("giriş"); // Serial.println (pin); gecikmə (THRESH_3); Keyboard.releaseAll (); }

void doAction (int kodu) {

// dəyişdiricilər əgər (getCodeByButton (kod, 0) == 2) {// Serial.println ("--- dəyişdiricilər ----"); if (getCodeByButton (kod, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kod, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kod, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kod, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } başqa Keyboard.release (shiftKey); } başqa {

// tapşırıqları yerinə yetirmək

keçid (kod) {halda 30: // --- | Fırça Klaviaturası.press (shiftKey); Keyboard.print ('b'); tam basın (kod); fasilə; hal 300: // --- | Silgi Keyboard.press (shiftKey); Keyboard.print ('e'); tam basın (kod); fasilə; halda 3000: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); tam basın (kod); fasilə; halda 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); tam basın (kod); fasilə; hal 320: //-| o Klaviaturanı Geri Al.press (ctrlKey); Keyboard.print ('z'); tam basın (kod); fasilə; halda 3020: //-| -o Klaviaturanı Yenidən Təyin Et.press (ctrlKey); Keyboard.print ('y'); tam basın (kod); fasilə; case 30020: // | --o Tarix Klaviaturası.press (shiftKey); Keyboard.print ('y'); tam basın (kod); fasilə; hal 230: //-o | Keyboard.press saxla (ctrlKey); Keyboard.print (lər); tam basın (kod); fasilə; halda 3200: //- | o- Sürətli-p.webp

int buttonCode = 0;

for (int i = 0; i <BUTTON_NUM; ++ i) {düymələri = buttonStateUpdate (düymələr ); buttonCode+= getButtonStateCode (düymələr ); }

əgər (buttonCode! = 0) {

Serial.print ("düymə kodu:"); Serial.println (buttonCode); }

doAction (buttonCode);

// ə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 (readButton (i)) {// doAction (i); //} //}

əgər (getCodeByButton (buttonCode, 0)! = 2)

Keyboard.releaseAll ();

gecikmə (gecikmə);

}

Məntiq haqqında demək üçün çox şey yoxdur, çünki sonuncu nəzarətçimə bənzəyir, iki fərqli fərqlə:

  1. Düymələr öz dövlət maşınları ilə qurulmuşdur
  2. Əyalətlər, hərəkəti təyin edən bir kod hazırlamaq üçün toplanır

Prinsip bit dəyişməsinə bənzəyir, lakin düymələr birdən çox vəziyyətə malik olduğundan və sadəcə ikili ilə təmsil oluna bilmədikləri üçün əvəzinə on qüvvə ilə vurulur. Sonra bütün düymələrin vəziyyətini tək bir rəqəmə əlavə edirəm və bütün qısa yolların kodunu qoyduğum doAction () keçid ifadəsinə ötürürəm.

Gördüyünüz kimi, bütün mümkün birləşmələri xəritəyə salmamışam. Sevdiyim qısa yollardan yalnız bir neçəsini əlavə etdim, qalanını ən uyğun gördüyünüz şəkildə doldurmağı sizə həvalə edirəm;)

Addım 3: Korpus

Qutusu
Qutusu
Qutusu
Qutusu
Qutusu
Qutusu

Qapaq üçün 3D printerdən istifadə etdim. Gördüyünüz kimi, dizaynın bəzi qüsurları var və onu bağlamaq üçün MacGyver -ə getməli oldum. Buna görə model faylını hələ yerləşdirməyəcəyəm.

Düymələr "skamyalara" isti şəkildə yapışdırılır ki, qapaqları yerində saxlasınlar. Yumşaq düymələr bu işdə xüsusilə yaxşıdır, buna görə də mənimki kimi bir iş düzəltməyi planlaşdırırsınızsa, onlardan bir neçəsini əldə etdiyinizə əmin olun.

Ayrıca, çox yüngül olduğu üçün qutunun içərisinə bir az ağırlıq əlavə etməyi təklif edirəm. Əlavə qramlar onu daha təbii hiss edəcək.

Hər şeyi göstərildiyi kimi lehimləyin və usb kabelini bağlayın və hər şey yerinə uyğun olmalıdır (bir az yapışqan istifadə edərək)!

Addım 4: Nəticə və mümkün təkmilləşdirmələr

Nəticə və mümkün təkmilləşdirmələr
Nəticə və mümkün təkmilləşdirmələr
Nəticə və mümkün təkmilləşdirmələr
Nəticə və mümkün təkmilləşdirmələr
Nəticə və mümkün təkmilləşdirmələr
Nəticə və mümkün təkmilləşdirmələr

Orada var! Yalnız bir əlinizlə bütün vacib qısa yollarınıza daxil olmaq üçün istifadə edə biləcəyiniz bir əl nəzarətçisi!

İstifadə etmək üçün bir az əzələ yaddaşı lazımdır, amma həqiqətən çox yönlüdür!

Əlbəttə ki, mükəmməl deyil və hazırda onu təkmilləşdirməyin bəzi yollarını düşünürəm. Qutunun təkmilləşdirilməsi və qısayolların əlavə edilməsi ilə yanaşı, fərqli qısayollarla birdən çox proqramı dəstəkləmək maraqlı olardı. Nəzarət sxemləri arasında keçid etmək üçün eyni anda 4 düyməyə basmaq kimi bir düymə birləşməsinə malik olmağı düşünürəm, Photoshop qısa yol kitabxanası arasında Maya üçün hazırlanmış bir dərnəyə keçmək.

Sadəcə bəzi fikirlər.

Növbəti dəfə oxuduğunuz üçün təşəkkürlər!

Tövsiyə: