Isi kandungan:
- Langkah 1: Merancang
- Langkah 2: Prototaip + Kod
- Langkah 3: Sarung
- Langkah 4: Hasil dan Kemungkinan Penambahbaikan
Video: Pengawal Pintasan Genggam (untuk Photoshop + Lagi) [Arduino]: 4 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
Kali terakhir saya membuat pad kawalan kecil untuk digunakan di Photoshop. Ia mengagumkan, dan saya masih menggunakannya! Tetapi ia juga agak terhad, dengan hanya lima butang dan dail ukuran dan kelegapan yang berguna. Saya masih banyak mencari papan kekunci …
Oleh itu, saya mula mengusahakan lelaran pad kawalan seterusnya, satu dengan lebih banyak butang dan fungsi. Satu pad kawalan untuk mengatur semuanya.
Ini bukan alat kawalan itu. TETAPI dengan cara mungkin lebih baik.
Bagaimana jika anda dapat memiliki banyak jalan pintas, tetapi dalam pakej super selesa dan ringan, anda boleh memegang dengan tangan percuma semasa anda menarik tanpa gangguan? … ok, cukup dengan infomersial.
Pengawal ini diprogramkan dengan cara, dengan hanya 4 butang, ia dapat dipetakan hingga 32 jalan pintas yang mungkin! Butang ke-5 tambahan ada untuk membolehkan saya menggunakan kekunci pengubah dalam mana-mana kombinasi, yang berguna untuk banyak program (adakah anda pernah mencuba kombo Alt-RMB di PS? Sekiranya belum, sila lakukan. Ini adalah penyelamat). Saya menerangkan sistemnya di kemudian hari.
Untuk membuat semua ini, anda memerlukan:
- 1 Mikrokontroler (Saya menggunakan Adafruit ItsyBitsy 32u4 tetapi mana-mana yang perlu dilakukan selagi ia mempunyai cip atmega32u4)
- 1 penyesuai mikro-USB (data, bukan hanya kuasa)
- 5 butang tekan (saya menggunakan yang lembut, seperti ini)
- Perintang Ohk 10k (1 setiap butang)
- Kawat, papan roti, bahan pateri, dll.
- Sesuatu untuk dibuat casing dengan (pencetak 3D, dll.)
Ini adalah projek Arduino peringkat pertengahan, dan saya cadangkan melihat tutorial masa lalu saya untuk lebih memahami apa yang sedang berlaku, kerana ini adalah pengulangan dari perkara yang saya jelaskan di sana.
Ok, mari kita mulakan!
Langkah 1: Merancang
Ini adalah skema asas yang saya buat dari pengawal. Litar ini sangat mudah apabila anda membandingkannya dengan projek saya sebelumnya! Tetapi kami akan dapat melakukan lebih banyak lagi dengan beberapa butang yang ada, dengan kekuatan tekan gabungan!
Idea di sebalik skema kawalan adalah bahawa setiap butang boleh bebas, ditekan dan dilepaskan, atau ditekan dan tahan. Menekan dan melepaskan adalah apa yang sebenarnya akan mengaktifkan jalan pintas, sambil menekan butang akan memberi kita akses ke jalan pintas yang berbeza. Oleh itu, jika anda hanya menekan butang A, anda akan mengaktifkan pintasan A, tetapi jika anda menahan B ketika menekan A, anda akan mendapat jalan pintas yang berbeza. Anda boleh menahan hingga 3 butang sekaligus sambil menekan, jadi apabila anda menggunakan beberapa kombinasi asas, anda akan melihat berapa banyak kombinasi yang mungkin dilakukan dengan sistem ini!
Butang kelima tambahan terasa seperti penambahan semula jadi, memandangkan bentuk genggam yang saya buat. Saya memutuskan untuk menggunakannya untuk mengakses kunci pengubah di photoshop. Cara kerjanya sedikit berbeza dari butang lain: setiap kali butang ibu jari dipegang, hanya pengubah yang akan digunakan. Ini akan diaktifkan apabila dipegang dan beberapa boleh ditekan. Jadi jika butang A adalah Shift, dan butang B adalah Ctrl, ketika anda menekan A dan B, itu seperti menekan kedua Shift dan Ctrl, tetapi hanya selama butang ibu jari dipegang!
Cengkerang direka untuk ergonomik dan ambidextrous. Saya sangat berhati-hati untuk membuatnya pas dengan selesa sehingga menggunakan jari kelingking tidak terlalu meletihkan, dan ia juga sesuai untuk tangan yang lebih besar dari tangan saya.
Langkah 2: Prototaip + Kod
Amalan baik untuk menguji butang di papan roti. Cukup mudah, sambungkan butang dan perintang seperti yang ditunjukkan. Anda boleh mengujinya dengan kod di sini (alternatif pautan pastebin):
#sertakan
// gunakan pilihan vthisv untuk MacOS:
// char ctrlKey = KEY_LEFT_GUI;
// gunakan pilihan vthisv untuk Windows dan Linux:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Kekunci 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}; // susunan semua pin butang
// Kepekaan
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;
// Bekukan bingkai
const int DELAY = 0;
enum Negeri {dibebaskan, ditekan, ditahan, dibebaskan};
butang struktur {
pin int; Negeri menyatakan; int timeHeld; }; // ibu jari, indeks, pertengahan, cincin, sedikit;
butang butang [BUTTON_NUM] = {};
butang initButton (int p) {
butang b; pinMode (p, INPUT); b.pin = p; b.state = Negeri:: dibebaskan; b.timeHeld = 0; pulangan b; }
batal persediaan () {
// letakkan kod persediaan anda di sini, untuk dijalankan sekali: Serial.begin (9600); Papan kekunci.begin ();
sementara (! bersiri) {};
// Butang untuk (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("set button"); Cetakan bersiri (i); Serial.print ("di pin:"); Serial.println (pin ); //buttons.pin = 1; butang = initButton (pin ); Serial.println (butang .pin); }
}
bool readButton (int pin) {
// butang semak dan tolak jika (digitalRead (pin) == TINGGI) {kelewatan (10); if (digitalRead (pin) == TINGGI) {return true; }} kembali palsu; }
int pintobin (int pin) {
jika (pin == pin [0]) pulangkan 1; jika (pin == pin [1]) pulangkan 10; jika (pin == pin [2]) pulangkan 100; jika (pin == pin [3]) pulangkan 1000; jika (pin == pin [4]) pulangkan 10000; } butang butangStateUpdate (butang b) {
tekan bool = readButton (b.pin);
tukar (b.state) {case States:: dibebaskan: b.timeHeld = 0; jika (tekan) b.state = State:: ditekan; rehat; kes ditekan: b.timeHeld + = 1; if (tekan) {if (b.timeHeld> (THRESH_1 / (1 + DELAY))) {b.state = Negeri:: ditahan; }} lain {// jika (b.timeHeld
int getButtonStateCode (butang b)
{return b.state * pintobin (b.pin); }
int getCodeByButton (int code, int index) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1 + indeks);
// operasi pertama
jika (opStep == 0) kembalikan kod / 10000; r1 = kod% 10000;
jika (opStep == 1)
pulangan r1 / 1000; r2 = r1% 1000; jika (opStep == 2) pulangkan r2 / 100; r3 = r2% 100; jika (opStep == 3) pulangkan r3 / 10; r4 = r3% 10; jika (opStep == 4) pulangkan r4 / 1; r5 = r4% 1; }
batal lengkap Tekan (int pin) {
// Serial.print ("input"); // Serial.println (pin); kelewatan (THRESH_3); Papan Kekunci.releaseAll (); }
void doAction (int code) {
// Pengubah jika (getCodeByButton (code, 0) == 2) {// Serial.println ("--- pengubah ----"); if (getCodeByButton (kod, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } Keyboard.release yang lain (altKey); jika (getCodeByButton (kod, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } Keyboard.release yang lain (ctrlKey); jika (getCodeByButton (kod, 3)> 0) {Keyboard.press (''); } Keyboard.release yang lain (''); if (getCodeByButton (kod, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } Keyboard.release yang lain (shiftKey); } lain {
// melaksanakan tugas
tukar (kod) {kes 30: // --- | Papan Kekunci Berus.press (shiftKey); Papan kekunci.cetak ('b'); completePress (kod); rehat; kes 300: // --- | Papan Kekunci Pemadam.press (shiftKey); Papan kekunci.cetak ('e'); completePress (kod); rehat; kes 3000: // --- | Papan Kekunci Bucket.press (shiftKey); Papan kekunci.cetak ('g'); completePress (kod); rehat; kes 30000: // --- | Papan Kekunci Lasso.press (shiftKey); Papan kekunci.print ('l'); completePress (kod); rehat; kes 320: // - | o Undo Keyboard.press (ctrlKey); Papan kekunci.print ('z'); completePress (kod); rehat; kes 3020: // - | -o Redo Keyboard.press (ctrlKey); Papan kekunci.print ('y'); completePress (kod); rehat; kes 30020: // | --o History Keyboard.press (shiftKey); Papan kekunci.print ('y'); completePress (kod); rehat; kes 230: // - o | Simpan Papan Kekunci.press (ctrlKey); Papan kekunci.cetak ('s'); completePress (kod); rehat; kes 3200: // - | o- Papan Kekunci-p.webp
int buttonCode = 0;
untuk (int i = 0; i <BUTTON_NUM; ++ i) {butang = butangStateUpdate (butang ); buttonCode + = getButtonStateCode (butang ); }
jika (butangCode! = 0) {
Serial.print ("kod butang:"); Serial.println (buttonCode); }
doAction (butang Kod);
// letakkan kod utama anda di sini, untuk dijalankan berulang kali: // untuk (int i = butang [0]; i <sizeof (butang) / sizeof (butang [0]) + butang [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
jika (getCodeByButton (buttonCode, 0)! = 2)
Papan Kekunci.releaseAll ();
kelewatan (DELAY);
}
Tidak banyak yang boleh dikatakan mengenai logiknya kerana ia serupa dengan pengawal terakhir saya, dengan dua perbezaan yang ketara:
- Butang adalah struktur dengan mesin keadaan mereka sendiri
- Negeri-negeri digabungkan bersama untuk membuat kod yang menentukan tindakan
Prinsipnya mirip dengan pengalihan bit, tetapi kerana butang mempunyai beberapa keadaan dan tidak dapat digambarkan dengan binari, ia digandakan dengan kekuatan sepuluh sebagai gantinya. Saya kemudian menambahkan semua keadaan butang menjadi satu nombor, dan meneruskannya ke pernyataan suis doAction (), di mana saya meletakkan semua kod pintasan.
Seperti yang anda lihat, saya tidak memetakan setiap kemungkinan kombinasi. Saya hanya menambah beberapa jalan pintas kegemaran saya, saya menyerahkan kepada anda untuk mengisi selebihnya bagaimana yang paling sesuai;)
Langkah 3: Sarung
Saya menggunakan pencetak 3D untuk selongsong. Seperti yang anda lihat, reka bentuknya mempunyai beberapa kekurangan dan saya terpaksa menggunakan MacGyver untuk menutupnya. Oleh itu, saya tidak akan menghantar fail model.
Butang-butang dilekatkan panas ke "bangku" sehingga mereka meletakkan penutupnya di tempat. Tombol tekan lembut sangat bagus untuk itu, jadi pastikan anda mendapatkannya jika anda merancang untuk membuat kes yang serupa dengan saya.
Juga, saya cadangkan untuk menambahkan sedikit berat di dalam beg ini, kerana ia sangat ringan. Gram tambahan akan menjadikannya terasa lebih semula jadi.
Selesaikan segalanya seperti yang ditunjukkan dan sambungkan kabel usb, dan semuanya mesti dipasang di tempatnya (dengan bantuan beberapa gam)!
Langkah 4: Hasil dan Kemungkinan Penambahbaikan
Di sana anda memilikinya! Alat kawalan tangan yang boleh anda gunakan untuk mengakses semua pintasan penting anda dengan satu tangan!
Memerlukan memori otot untuk digunakan, tetapi sangat serba boleh!
Sudah tentu ia tidak sempurna, dan sekarang saya sedang memikirkan beberapa cara untuk memperbaikinya. Selain memperbaiki casing dan menambah jalan pintas, saya rasa akan menarik untuk menyokong pelbagai aplikasi dengan jalan pintas yang berbeza. Saya berfikir untuk mempunyai kombinasi butang untuk beralih antara skema kawalan, seperti menekan 4 butang pada masa yang sama untuk menukar antara perpustakaan pintasan Photoshop ke satu-disesuaikan yang dibuat untuk Maya.
Hanya beberapa idea.
Terima kasih kerana membaca, sehingga lain kali!
Disyorkan:
TIADA LAGI MENINGKATKAN LAGI: 5 Langkah
TIADA LEBIH LANJUT HUJUNG: Tajuk Ganti: Jam Waktu IP bahagian 3Jika anda suka, saya memasukkan ini dalam peraduan Jam. Adakah anda bosan kerana perlu ke Spring Forward? Adakah anda bosan kerana terpaksa Mundur? Baiklah, saya. Saya mempunyai jam penggera lama yang memperbaikinya (untuk sementara waktu) (Lihat Gambar
Pengawal Permainan DIY Berasaskan Arduino - Pengawal Permainan Arduino PS2 - Bermain Tekken Dengan Gamepad Arduino DIY: 7 Langkah
Pengawal Permainan DIY Berasaskan Arduino | Pengawal Permainan Arduino PS2 | Bermain Tekken Dengan Gamepad Arduino DIY: Hai kawan-kawan, bermain permainan selalu menyeronokkan tetapi bermain dengan permainan peribadi DIY Controller anda lebih menggembirakan. Oleh itu, kami akan menjadikan Pengawal permainan menggunakan arduino pro micro dalam arahan ini
YABC - Namun Pengawal Blynk Lain - Pengawal Suhu dan Kelembapan Awan IoT, ESP8266: 4 Langkah
YABC - Namun Pengawal Blynk Yang Lain - Pengawal Suhu dan Kelembapan Awan IoT, ESP8266: Hai Pembuat, Saya baru-baru ini mula menanam cendawan di rumah, cendawan tiram, tetapi saya sudah mempunyai 3x pengawal ini di rumah untuk kawalan Suhu Fermenter untuk bir rumah saya, isteri juga melakukan perkara Kombucha ini sekarang, dan sebagai Termostat untuk Panas
Konsol Genggam Dengan Pengawal dan Sensor Tanpa Wayar (Arduino MEGA & UNO): 10 Langkah (dengan Gambar)
Konsol Genggam Dengan Pengawal dan Sensor Tanpa Wayar (Arduino MEGA & UNO): Apa yang saya gunakan: - Arduino MEGA- 2x Arduino UNO- Adafruit 3.5 " TFT 320x480 Touchscreen HXD8357D- Buzzer- 4Ohm 3W Speaker- 5mm LED lights- Ultimaker 2+ Printer w / Black PLA Filament- Lasercutter w / MDF wood- Cat spray hitam (untuk kayu) - 3x nRF24
Cara Membuat Pengawal Xbox Anda Berkedip Dengan Beberapa Leds, tetapi Ia Tidak Akan Bergetar Lagi: 4 Langkah
Cara Membuat Pengawal Xbox Anda Berkedip Dengan Beberapa Leds, tetapi Tidak Akan Goyang Lagi: JAUH ANDA AKAN BLINK TETAPI TIDAK AKAN MENGGANTIKAN LAGI KERANA PROJEK INI ANDA HARUS MENGAMBIL MOTOR