İçindekiler:

El Kısayol Denetleyicisi (Photoshop + Daha Fazlası için) [Arduino]: 4 Adım
El Kısayol Denetleyicisi (Photoshop + Daha Fazlası için) [Arduino]: 4 Adım

Video: El Kısayol Denetleyicisi (Photoshop + Daha Fazlası için) [Arduino]: 4 Adım

Video: El Kısayol Denetleyicisi (Photoshop + Daha Fazlası için) [Arduino]: 4 Adım
Video: #Photoshop Nasıl Yapılır? Sıfırdan Başlamak İsteyenlere Photoshop Kısayolları Kemal Kaluç Anlatıyor 2024, Kasım
Anonim
El Kısayol Denetleyicisi (Photoshop + Daha Fazlası için) [Arduino]
El Kısayol Denetleyicisi (Photoshop + Daha Fazlası için) [Arduino]

Geçen sefer Photoshop'ta kullanmak için küçük bir kontrol paneli oluşturdum. Harikalar yarattı ve hala kullanıyorum! Ancak aynı zamanda, sadece beş düğme ve kullanışlı boyut ve opaklık kadranları ile oldukça sınırlıdır. Yine de kendimi klavyeye çok uzanırken buldum…

Bu yüzden, kontrol panelinin bir sonraki yinelemesi üzerinde çalışmaya başladım, biri çok daha fazla düğme ve işlevsellik içeriyordu. Hepsine hükmedecek bir kontrol paneli.

Bu o kontrol paneli değil. AMA bir bakıma daha iyi olabilir.

Ya bir ton kısayolunuz olsaydı, ancak süper rahat ve hafif bir pakette kesintisiz çizim yaparken serbest elinizle tutabilirsiniz? …tamam, reklamla yeter.

Bu denetleyici, yalnızca 4 düğmeyle 32 olası kısayolla eşlenebilecek şekilde programlanmıştır! Ek 5. düğme, birçok program için yararlı olan herhangi bir kombinasyonda değiştirici tuşları kullanmama izin vermek için orada (PS'de Alt-RMB kombinasyonunu hiç denediniz mi? Denemediyseniz, lütfen deneyin. Bu bir cankurtaran). Sistemi daha sonra açıklarım.

Tüm bunları yapmak için ihtiyacınız olacak:

  • 1 Mikrodenetleyici (Bir Adafruit ItsyBitsy 32u4 kullandım ancak atmega32u4 çipine sahip olduğu sürece herhangi birinin yapması gerekir)
  • 1 mikro USB adaptörü (veriler, yalnızca güç için değil)
  • 5 adet buton (Bunun gibi yumuşak olanları kullandım)
  • 10k Ohm dirençler (düğme başına 1 adet)
  • Teller, devre tahtası, lehim malzemesi vb.
  • (3D yazıcı vb.)

Bu orta seviye bir Arduino projesidir ve neler olup bittiğini daha iyi anlamak için geçmiş eğitimime bakmanızı öneririm, çünkü bunun çoğu orada anlattığım şeylerin tekrarıdır.

Tamam, başlayalım!

Adım 1: Planlama

Planlama
Planlama

Bu, denetleyicinin çizdiğim temel bir şemasıdır. Önceki projemle karşılaştırdığınızda devre gerçekten basit! Ancak sahip olduğu birkaç düğmeyle, kombine preslerin gücüyle çok daha fazlasını yapabileceğiz!

Kontrol şemasının arkasındaki fikir, her bir düğmenin serbest, basılı ve bırakılmış veya basılı tutulmuş olmasıdır. Basmak ve bırakmak kısayolu gerçekten etkinleştirecek olan şeydir, düğmeleri basılı tutmak ise farklı kısayollara erişmemizi sağlayacaktır. Yani sadece A düğmesine basarsanız, A kısayolunu etkinleştirirsiniz, ancak A'ya basarken B'yi basılı tutarsanız, farklı bir kısayol alırsınız. Basarken aynı anda en fazla 3 düğmeyi basılı tutabilirsiniz, bu nedenle bazı temel kombinatorikleri uyguladığınızda, bu sistemle kaç kombinasyonun mümkün olduğunu göreceksiniz!

Ekstra beşinci düğme, bulduğum avuçiçinin şekli göz önüne alındığında, doğal bir ekleme gibi geldi. Photoshop'ta değiştirici tuşlara erişmek için kullanmaya karar verdim. Çalışma şekli diğer düğmelerden biraz farklıdır: başparmak düğmesi basılı tutulduğunda yalnızca değiştiriciler kullanılacaktır. Bunlar, tutulduklarında etkinleşir ve çoklu basılabilir. Bu nedenle, A düğmesi Shift ise ve B düğmesi Ctrl ise, A ve B'yi basılı tuttuğunuzda, hem Shift hem de Ctrl'ye basmak gibi olacaktır, ancak yalnızca başparmak düğmesi basılı tutulduğu sürece!

Kabuk hem ergonomik hem de çok yönlü olacak şekilde tasarlanmıştır. Serçe parmağını kullanmak çok yorucu olmasın diye sıkıca oturmasına büyük özen gösterdim ve benimkinden büyük eli olanlar için de işe yaramalı.

Adım 2: Prototip + Kod

Prototip + Kod
Prototip + Kod

Bir devre tahtasındaki düğmeleri test etmek iyi bir uygulamadır. Oldukça basit, sadece düğmeleri ve dirençleri gösterildiği gibi bağlayın. Buradaki kodla test edebilirsiniz (pastebin link alternatifi):

#Dahil etmek

// MacOS için vthisv seçeneğini kullanın:

//char ctrlKey = KEY_LEFT_GUI;

// Windows ve Linux için vthisv seçeneğini kullanın:

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

//İşlev Tuşları burada

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

const int pinler = {9, 10, 11, 12, 13}; // tüm buton pinlerinin dizisi

//duyarlılık

const int THRESH_0 = 10; const int EŞİK_1 = 20; const int EŞİK_2 = 25; const int EŞİK_3 = 50; const int THRESH_4 = 100; const int EŞİK_5 = 200;

const int BUTTON_NUM = 5;

//Çerçeveleri dondur

const int GECİKME = 0;

enum Durumlar {serbest bırakıldı, basıldı, tutuldu, serbest bırakıldı};

yapı düğmesi {

int pini; devletler durumu; int timeHeld; }; //parmak, dizin, orta, halka, küçük;

düğme düğmeleri[BUTTON_NUM] = {};

düğme initButton(int p) {

düğme b; pinMode(p, GİRİŞ); b.pin = p; b.state = Durumlar::serbest bırakıldı; b.timeHeld = 0; dönüş b; }

geçersiz kurulum() {

// bir kez çalıştırmak için kurulum kodunuzu buraya koyun: Serial.begin(9600); klavye.başla();

while(!Seri){};

//Butonlar for(int i = 0; i < (BUTTON_NUM); ++i) { Serial.print("düğmeyi ayarla"); Seri.baskı(i); Serial.print(" pinde: "); Serial.println(pinler); //düğmeler.pin = 1; düğmeler=initButton(pinler); Serial.println(düğmeler.pin); }

}

bool readButton(int pin) {

// eğer (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == YÜKSEK) { return true; } } false döndür; }

int pintobin(int pin) {

if (pin==pins[0]) 1 döndür; if (pin== pin[1]) 10 döndürür; if (pin== pin[2]) 100 döndürür; if (pin== pin[3]) 1000 döndürür; if (pin== pin[4]) 10000 döndürür; } buttonStateUpdate(düğme b) {

bool press = readButton(b.pin);

switch (b.state) { case States::freed: b.timeHeld=0; if (basın) b.state=Durumlar::basıldı; kırmak; basılan vaka: b.timeHeld+=1; if (basın) { if (b.timeHeld>(THRESH_1/(1+DELAY))) { b.state=States::held; } } else { //if (b.timeHeld

int getButtonStateCode(düğme b)

{ return b.state*pintobin(b.pin); }

int getCodeByButton(int kodu, int dizin) {

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

//ilk işlem

if (opStep==0) dönüş kodu/10000; r1 = kod%10000;

eğer (opAdım==1)

dönüş r1/1000; r2 = r1%1000; if (opStep==2) r2/100 döndürür; r3 = r%100; if (opStep==3) r3/10 döndürür; r4 = r%10; if (opStep==4) r4/1 döndürür; r5 = r4%1; }

void completePress(int pin) {

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

geçersiz doAction(int kodu) {

//Değiştiriciler if (getCodeByButton(kod, 0)==2) { // Serial.println("---değiştiriciler----"); 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------"); } else Keyboard.release(shiftKey); } Başka {

// görevleri gerçekleştir

geçiş (kod) { durum 30: //---| Fırça Klavye.press(shiftKey); klavye.print('b'); tamamlamaPress(kod); kırmak; vaka 300: //---| Silgi Klavye.press(shiftKey); klavye.print('e'); tamamlamaPress(kod); kırmak; vaka 3000: //---| Kova Klavye.press(shiftKey); klavye.print('g'); tamamlamaPress(kod); kırmak; vaka 30000: //---| Kement Klavyesi.press(shiftKey); klavye.print('l'); tamamlamaPress(kod); kırmak; case 320: //--|o Klavyeyi Geri Al.press(ctrlKey); klavye.print('z'); tamamlamaPress(kod); kırmak; case 3020: //-|-o Klavyeyi Yinele.press(ctrlKey); klavye.print('y'); tamamlamaPress(kod); kırmak; case 30020: //|--o History Keyboard.press(shiftKey); klavye.print('y'); tamamlamaPress(kod); kırmak; durum 230: //--o| Klavyeyi kaydedin.press(ctrlKey); klavye.print('s'); tamamlamaPress(kod); kırmak; case 3200: //-|o- Hızlı-p.webp

int düğmeKodu=0;

for(int i = 0; i < BUTTON_NUM; ++i) { düğmeler=buttonStateUpdate(düğmeler); buttonCode+=getButtonStateCode(düğmeler); }

if(düğmeKodu!=0) {

Serial.print("düğme kodu: "); Serial.println(düğmeKodu); }

doAction(düğmeKodu);

// tekrar tekrar çalıştırmak için ana kodunuzu buraya koyun: // for(int i = button[0]; i < sizeof(buttons)/sizeof(buttons[0])+buttons[0]; ++i) { / // if (readButton(i)) { // doAction(i); // } // }

if (getCodeByButton(buttonCode, 0)!=2)

Keyboard.releaseAll();

gecikme(DELAY);

}

Mantık hakkında söylenecek fazla bir şey yok, çünkü iki önemli farkla son denetleyiciminkine benziyor:

  1. Düğmeler kendi durum makinelerine sahip yapılardır.
  2. Durumlar, eylemi belirleyen bir kod yapmak için bir araya toplanır.

İlke, bit kaydırmaya benzer, ancak düğmelerin birden fazla durumu olduğundan ve basitçe bir ikili ile temsil edilemediğinden, bunun yerine onluk güçlerle çarpılırlar. Daha sonra tüm düğme durumlarını tek bir sayıya toplarım ve onu, tüm kısayol kodunu koyduğum doAction() switch deyimine aktarırım.

Gördüğünüz gibi, olası her kombinasyonu eşleştirmedim. Sadece en sevdiğim kısayollardan birkaçını ekledim, gerisini en uygun gördüğünüz şekilde doldurmayı size bırakıyorum;)

Adım 3: Muhafaza

kasa
kasa
kasa
kasa
kasa
kasa

Kasa için 3D yazıcı kullandım. Gördüğünüz gibi, tasarımın bazı kusurları var ve onu kapatmanın bir yolunu MacGyver'a verdim. Bu yüzden henüz model dosyasını yayınlamayacağım.

Düğmeler, kapakları yerinde tutmak için "banklar" üzerine sıcak yapıştırılmıştır. Yumuşak butonlar özellikle bu konuda iyidir, bu yüzden benimkine benzer bir kasa yapmayı planlıyorsanız, bunlardan bazılarını aldığınızdan emin olun.

Ayrıca çok hafif olduğu için kasanın içine biraz ağırlık eklemenizi öneririm. Ekstra gram, tutmayı daha doğal hissettirecek.

Her şeyi gösterildiği gibi lehimleyin ve usb kablosunu bağlayın, her şey yerine oturmalıdır (biraz yapıştırıcı yardımıyla)!

4. Adım: Sonuç ve Olası İyileştirmeler

Sonuç ve Olası İyileştirmeler
Sonuç ve Olası İyileştirmeler
Sonuç ve Olası İyileştirmeler
Sonuç ve Olası İyileştirmeler
Sonuç ve Olası İyileştirmeler
Sonuç ve Olası İyileştirmeler

İşte aldın! Tüm önemli kısayollarınıza tek elle erişmek için kullanabileceğiniz bir el kumandası!

Kullanmak biraz kas hafızası gerektirir, ancak gerçekten çok yönlüdür!

Tabii ki mükemmel değil ve şu anda onu iyileştirmenin bazı yollarını düşünüyorum. Kasayı iyileştirmenin ve kısayolları eklemenin yanı sıra, farklı kısayollarla birden fazla uygulamayı desteklemenin ilginç olacağını düşünüyorum. Kontrol şemaları arasında geçiş yapmak için bir düğme kombinasyonuna sahip olmayı düşünüyorum, örneğin bir Photoshop kısayol kitaplığı arasında Maya için tek kişiye özel olarak geçiş yapmak için aynı anda 4 düğmeye basmak gibi.

Sadece bazı fikirler.

Bir dahaki sefere kadar okuduğunuz için teşekkürler!

Önerilen: