Daftar Isi:

Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]: 4 Langkah
Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]: 4 Langkah

Video: Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]: 4 Langkah

Video: Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]: 4 Langkah
Video: 25 shortcut photoshop yang wajib kalian ketahui 2024, Juli
Anonim
Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]
Pengontrol Pintasan Genggam (untuk Photoshop + Lainnya) [Arduino]

Terakhir kali saya membuat control pad kecil untuk digunakan di Photoshop. Ini bekerja dengan sangat baik, dan saya masih menggunakannya! Tapi itu juga agak terbatas, dengan hanya lima tombol dan tombol ukuran dan opacity yang berguna. Saya masih sering meraih keyboard…

Jadi saya mulai mengerjakan iterasi berikutnya dari panel kontrol, satu dengan lebih banyak tombol dan fungsionalitas. Satu pad kontrol untuk mengatur semuanya.

Ini bukan papan kontrol itu. TAPI di satu sisi mungkin lebih baik.

Bagaimana jika Anda dapat memiliki banyak pintasan, tetapi dalam paket yang sangat pas dan ringan, Anda dapat memegangnya dengan tangan bebas saat menggambar tanpa gangguan? …ok, cukup dengan infomersialnya.

Kontroler ini diprogram sedemikian rupa sehingga, hanya dengan 4 tombol, dapat dipetakan hingga 32 kemungkinan pintasan! Tombol 5 tambahan ada untuk memungkinkan saya menggunakan tombol pengubah dalam kombinasi apa pun, yang berguna untuk banyak program (apakah Anda pernah mencoba kombo Alt-RMB di PS? Jika belum, silakan lakukan. Ini penyelamat). Nanti saya jelaskan sistemnya.

Untuk membuat semua ini, Anda perlu:

  • 1 Mikrokontroler (Saya menggunakan Adafruit ItsyBitsy 32u4 tetapi apa pun boleh asalkan memiliki chip atmega32u4)
  • 1 adaptor micro-USB (data, bukan hanya daya)
  • 5 tombol push (saya menggunakan yang lembut, seperti ini)
  • Resistor 10k Ohm (1 per tombol)
  • Kabel, papan tempat memotong roti, bahan solder, dll.
  • Sesuatu untuk membuat casing dengan (printer 3D, dll.)

Ini adalah proyek Arduino tingkat menengah, dan saya sarankan untuk melihat tutorial saya sebelumnya untuk lebih memahami apa yang sedang terjadi, karena banyak dari ini adalah pengulangan dari hal-hal yang saya jelaskan di sana.

Oke, mari kita mulai!

Langkah 1: Perencanaan

Perencanaan
Perencanaan

Ini adalah skema dasar yang saya gambar dari pengontrol. Rangkaian ini sangat sederhana jika Anda membandingkannya dengan proyek saya sebelumnya! Tetapi kita akan dapat melakukan lebih banyak lagi dengan beberapa tombol yang dimilikinya, dengan kekuatan penekanan gabungan!

Ide di balik skema kontrol adalah bahwa setiap tombol bisa bebas, ditekan dan dilepaskan, atau ditekan dan ditahan. Menekan dan melepaskan adalah apa yang sebenarnya akan mengaktifkan pintasan, sementara menahan tombol akan memberi kita akses ke pintasan yang berbeda. Jadi jika Anda hanya menekan tombol A, Anda akan mengaktifkan pintasan A, tetapi jika Anda menahan B saat menekan A, Anda akan mendapatkan pintasan yang berbeda. Anda dapat menahan hingga 3 tombol sekaligus saat menekan, jadi ketika Anda menerapkan beberapa kombinatorik dasar, Anda akan melihat berapa banyak kombinasi yang mungkin dengan sistem ini!

Tombol kelima ekstra terasa seperti tambahan alami, mengingat bentuk genggam yang saya buat. Saya memutuskan untuk menggunakannya untuk mengakses kunci pengubah di photoshop. Cara kerjanya sedikit berbeda dari tombol lainnya: setiap kali tombol jempol ditahan, hanya pengubah yang akan digunakan. Ini akan aktif ketika dipegang dan beberapa dapat ditekan. Jadi jika tombol A adalah Shift, dan tombol B adalah Ctrl, ketika Anda menahan A dan B, itu akan seperti menekan Shift dan Ctrl, tetapi hanya selama tombol ibu jari ditahan!

Shell dirancang untuk menjadi ergonomis dan ambidextrous. Saya sangat berhati-hati untuk membuatnya pas sehingga menggunakan jari kelingking tidak terlalu melelahkan, dan itu harus bekerja untuk mereka yang memiliki tangan lebih besar dari saya juga.

Langkah 2: Prototipe + Kode

Prototipe + Kode
Prototipe + Kode

Ini adalah praktik yang baik untuk menguji tombol pada papan tempat memotong roti. Ini cukup sederhana, cukup sambungkan tombol dan resistor seperti yang ditunjukkan. Anda dapat mengujinya dengan kode di sini (alternatif tautan pastebin):

#termasuk

// gunakan opsi vthisv untuk MacOS:

//char ctrlKey = KEY_LEFT_GUI;

// gunakan opsi vthisv untuk Windows dan Linux:

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

//Tombol Fungsi di sini

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

const int pin = {9, 10, 11, 12, 13}; // larik semua pin tombol

//Sensibilitas

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;

//Membekukan bingkai

const int DELAY = 0;

enum Serikat { dibebaskan, ditekan, ditahan, dilepaskan };

tombol struktur {

int pin; negara bagian; int waktuDimiliki; }; //jempol, indeks, tengah, cincin, kecil;

tombol tombol[BUTTON_NUM] = {};

tombol initButton(int p) {

tombol b; pinMode(p, INPUT); b.pin = p; b.negara bagian = Serikat::dibebaskan; b.timeHeld = 0; kembali b; }

batalkan pengaturan() {

// letakkan kode setup Anda di sini, untuk dijalankan sekali: Serial.begin(9600); Keyboard.mulai();

while(!Serial){};

//Tombol untuk(int i = 0; i < (BUTTON_NUM); ++i) { Serial.print("set button "); Serial.print(i); Serial.print(" pada pin: "); Serial.println(pin); //buttons.pin = 1; tombol=initButton(pin); Serial.println(tombol.pin); }

}

bool readButton(pin int) {

// periksa dan debounce tombol if (digitalRead(pin) == HIGH) { delay(10); if (digitalRead(pin) == HIGH) { mengembalikan true; } } mengembalikan salah; }

int pintobin(int pin) {

jika (pin==pin[0]) kembali 1; if (pin== pin[1]) mengembalikan 10; if (pin== pin[2]) mengembalikan 100; if (pin== pin[3]) mengembalikan 1000; if (pin== pin[4]) kembalikan 10.000; } tombol buttonStateUpdate(tombol b) {

bool tekan = readButton(b.pin);

switch (b.state) { case States::freed: b.timeHeld=0; if (tekan) b.state=Status::ditekan; merusak; kasus ditekan: b.timeHeld+=1; if (tekan) { if (b.timeHeld>(THRESH_1/(1+DELAY))) { b.state=States::hold; } } else { //if (b.timeHeld

int getButtonStateCode(tombol b)

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

int getCodeByButton(kode int, indeks int) {

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

//operasi pertama

if (opStep==0) mengembalikan kode/10000; r1 = kode%10000;

jika (opLangkah==1)

kembali r1/1000; r2 = r1%1000; if (opStep==2) mengembalikan r2/100; r3 = r2%100; if (opStep==3) kembalikan r3/10; r4 = r3%10; if (opStep==4) kembalikan r4/1; r5 = r4%1; }

void completeTekan(int pin) {

// Serial.print("masukan"); // Serial.println(pin); tunda(THRESH_3); Keyboard.releaseAll(); }

void doAction(kode int) {

//Pengubah if (getCodeByButton(code, 0)==2) { // Serial.println("---modifiers----"); if (getCodeByButton(code, 1)>0) { Keyboard.press(altKey); // Serial.println("-------alt---------"); } else Keyboard.release(altKey); if (getCodeByButton(code, 2)>0) { Keyboard.press(ctrlKey); // Serial.println("--------ctrl----------"); } else Keyboard.release(ctrlKey); if (getCodeByButton(code, 3)>0) { Keyboard.press(' '); } else Keyboard.release(' '); if (getCodeByButton(code, 4)>0) { Keyboard.press(shiftKey); // Serial.println("------shift------"); } else Keyboard.release(shiftKey); } lain {

// melakukan tugas

switch (kode) { kasus 30: //---| Kuas Keyboard.tekan (shiftKey); Keyboard.print('b'); selesaiTekan(kode); merusak; kasus 300: //---| Keyboard Penghapus.tekan (shiftKey); Keyboard.print('e'); selesaiTekan(kode); merusak; kasus 3000: //---| Bucket Keyboard.tekan (shiftKey); Keyboard.print('g'); selesaiTekan(kode); merusak; kasus 30000: //---| Lasso Keyboard.tekan (shiftKey); Keyboard.print('l'); selesaiTekan(kode); merusak; case 320: //--|o Undo Keyboard.press(ctrlKey); Keyboard.print('z'); selesaiTekan(kode); merusak; kasus 3020: //-|-o Ulangi Keyboard.tekan(ctrlKey); Keyboard.print('y'); selesaiTekan(kode); merusak; case 30020: //|--o History Keyboard.press(shiftKey); Keyboard.print('y'); selesaiTekan(kode); merusak; kasus 230: //--o| Simpan Keyboard.tekan(ctrlKey); Keyboard.print('s'); selesaiTekan(kode); merusak; case 3200: //-|o- Keyboard-p.webp

int kode tombol=0;

for(int i = 0; i < BUTTON_NUM; ++i) { keys=buttonStateUpdate(buttons); buttonCode+=getButtonStateCode(buttons); }

if(Kode tombol!=0) {

Serial.print("kode tombol: "); Serial.println(Kode tombol); }

doAction(Kode tombol);

// letakkan kode utama Anda di sini, untuk dijalankan berulang kali: // for(int i = keys[0]; i < sizeof(buttons)/sizeof(buttons[0])+buttons[0]; ++i) { / / // if (readButton(i)) { // lakukanAction(i); // } // }

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

Keyboard.releaseAll();

penundaan (DELAY);

}

Tidak banyak yang bisa dikatakan tentang logikanya karena mirip dengan pengontrol terakhir saya, dengan dua perbedaan penting:

  1. Tombol-tombolnya adalah struct dengan mesin statusnya sendiri
  2. Status dijumlahkan untuk membuat kode yang menentukan tindakan

Prinsipnya mirip dengan bit-shifting, tetapi karena tombol memiliki banyak status dan tidak dapat direpresentasikan dengan biner, tombol tersebut dikalikan dengan pangkat sepuluh. Saya kemudian menambahkan semua status tombol menjadi satu nomor, dan meneruskannya ke pernyataan sakelar doAction(), di mana saya meletakkan semua kode pintasan.

Seperti yang Anda lihat, saya tidak memetakan setiap kemungkinan kombinasi. Saya hanya menambahkan beberapa pintasan favorit saya, saya serahkan kepada Anda untuk mengisi sisanya sesuai keinginan Anda;)

Langkah 3: Casing

Casingnya
Casingnya
Casingnya
Casingnya
Casingnya
Casingnya

Saya menggunakan printer 3D untuk casingnya. Seperti yang Anda lihat, desainnya memiliki beberapa kekurangan dan saya harus menggunakan MacGyver untuk menutupnya. Jadi saya tidak akan memposting file model dulu.

Tombol-tombolnya direkatkan ke "bangku" sehingga tutupnya tetap di tempatnya. Tombol-tombol lembut sangat bagus dalam hal itu, jadi pastikan untuk mendapatkannya jika Anda berencana membuat kasing yang mirip dengan saya.

Juga, saya sarankan menambahkan sedikit bobot di dalam kasing, karena sangat ringan. Gram ekstra akan membuatnya terasa lebih alami.

Solder semuanya seperti yang ditunjukkan dan sambungkan kabel usb, dan semuanya harus pas (dengan bantuan lem)!

Langkah 4: Hasil dan Kemungkinan Peningkatan

Hasil dan Kemungkinan Peningkatan
Hasil dan Kemungkinan Peningkatan
Hasil dan Kemungkinan Peningkatan
Hasil dan Kemungkinan Peningkatan
Hasil dan Kemungkinan Peningkatan
Hasil dan Kemungkinan Peningkatan

Di sana Anda memilikinya! Pengontrol genggam yang dapat Anda gunakan untuk mengakses semua pintasan penting Anda hanya dengan satu tangan!

Dibutuhkan beberapa otot-memori untuk digunakan, tapi itu benar-benar serbaguna!

Tentu saja itu tidak sempurna, dan saat ini saya sedang memikirkan beberapa cara untuk memperbaikinya. Selain memperbaiki casing dan menambahkan pintasan, saya pikir saya akan menarik untuk mendukung banyak aplikasi dengan pintasan yang berbeda. Saya sedang berpikir untuk memiliki kombinasi tombol untuk beralih di antara skema kontrol, seperti menekan 4 tombol pada saat yang sama untuk beralih antara perpustakaan pintasan Photoshop ke satu-penjahit yang dibuat untuk Maya.

Hanya beberapa ide.

Terima kasih telah membaca, sampai jumpa lagi!

Direkomendasikan: