فهرست مطالب:

کنترل کننده میانبر دستی (برای Photoshop + بیشتر) [Arduino]: 4 مرحله
کنترل کننده میانبر دستی (برای Photoshop + بیشتر) [Arduino]: 4 مرحله

تصویری: کنترل کننده میانبر دستی (برای Photoshop + بیشتر) [Arduino]: 4 مرحله

تصویری: کنترل کننده میانبر دستی (برای Photoshop + بیشتر) [Arduino]: 4 مرحله
تصویری: پاک سازی فایل های اضافه و کش ویندوز 2024, نوامبر
Anonim
کنترل کننده میانبر دستی (برای Photoshop + بیشتر) [Arduino]
کنترل کننده میانبر دستی (برای Photoshop + بیشتر) [Arduino]

آخرین بار من یک پد کنترل کوچک برای استفاده در Photoshop ایجاد کردم. این فوق العاده بود ، و من هنوز هم از آن استفاده می کنم! اما نسبتاً محدود است ، فقط با پنج دکمه و اندازه مفید و شماره گیرهای کدورت. من هنوز خودم را بسیار در حال دستیابی به صفحه کلید می دانم…

بنابراین ، من شروع به کار روی تکرار بعدی پد کنترل کردم ، یکی با دکمه ها و قابلیت های بیشتر. یک پد کنترل برای اداره همه آنها.

این پد کنترل نیست اما به نوعی ممکن است بهتر باشد.

اگر بتوانید تعداد زیادی میانبر داشته باشید ، اما در یک بسته فوق العاده راحت و سبک وزن می توانید با دست آزاد خود در حالی که بدون وقفه نقاشی می کنید نگه دارید؟ … بسیار خوب ، به اندازه کافی در زمینه تبلیغات تجاری.

این کنترلر به گونه ای برنامه ریزی شده است که تنها با 4 دکمه می توان تا 32 میانبر احتمالی را ترسیم کرد! دکمه پنجم اضافی به من امکان می دهد از کلیدهای اصلاح کننده در هر ترکیبی استفاده کنم ، که برای بسیاری از برنامه ها مفید است (آیا تا به حال ترکیبی از Alt-RMB را در PS امتحان کرده اید؟ اگر نکرده اید ، لطفاً انجام دهید. این نجات دهنده است). بعداً سیستم را توضیح می دهم.

برای تهیه همه اینها به موارد زیر نیاز دارید:

  • 1 میکروکنترلر (من از Adafruit ItsyBitsy 32u4 استفاده کردم اما هر کسی باید تا زمانی که تراشه atmega32u4 دارد)
  • 1 آداپتور میکرو USB (داده ، نه فقط قدرت)
  • 5 دکمه فشاری (من از دکمه های نرم استفاده کردم ، مانند اینها)
  • مقاومتهای 10k اهم (1 عدد در هر دکمه)
  • سیم ، تخته نان ، مواد لحیم کاری و غیره
  • چیزی برای ساخت یک پوشش (چاپگر سه بعدی و غیره)

این یک پروژه سطح متوسط آردوینو است ، و من پیشنهاد می کنم برای درک بهتر آنچه در جریان است ، به آموزش قبلی خود نگاه کنید ، زیرا بیشتر این موارد تکرار مواردی است که در آنجا توضیح دادم.

خوب ، بیایید شروع کنیم!

مرحله 1: برنامه ریزی

برنامه ریزی
برنامه ریزی

این یک شماتیک اساسی است که من از کنترلر ترسیم کردم. وقتی مدار را با پروژه قبلی من مقایسه کنید ، واقعاً ساده است! اما ما می توانیم با چند دکمه ای که دارد ، با قدرت پرس های ترکیبی ، کارهای بیشتری انجام دهیم!

ایده پشت طرح کنترل این است که هر دکمه می تواند آزاد ، فشرده و آزاد شود ، یا فشرده و نگه داشته شود. فشار دادن و رها کردن چیزی است که در واقع میانبر را فعال می کند ، در حالی که نگه داشتن دکمه ها به ما امکان دسترسی به میانبرهای مختلف را می دهد. بنابراین اگر فقط دکمه A را فشار دهید ، میانبر A را فعال می کنید ، اما اگر B را فشار دهید A را فشار دهید ، یک میانبر متفاوت دریافت خواهید کرد. هنگام فشار دادن می توانید تا 3 دکمه را به طور همزمان نگه دارید ، بنابراین هنگامی که برخی از ترکیبات اولیه را اعمال می کنید ، خواهید دید که چند ترکیب با این سیستم امکان پذیر است!

با توجه به شکل دستی که به آن رسیدم ، دکمه پنجم اضافی مانند یک افزودنی طبیعی به نظر می رسید. تصمیم گرفتم از آن برای دسترسی به کلیدهای اصلاح کننده در فتوشاپ استفاده کنم. نحوه عملکرد کمی متفاوت از دکمه های دیگر است: هر زمان که دکمه شست نگه داشته شود ، فقط از اصلاح کننده ها استفاده می شود. هنگامی که نگه داشته می شوند و می توان چندین را فشار داد ، فعال می شوند. بنابراین اگر دکمه A Shift باشد و دکمه B Ctrl باشد ، وقتی A و B را نگه دارید مانند فشار دادن Shift و Ctrl خواهد بود ، اما فقط تا زمانی که دکمه شست نگه داشته شود!

پوسته به گونه ای طراحی شده است که هم ارگونومیک و هم دوطرفه باشد. من بسیار مراقب بودم که آن را محکم کنم تا استفاده از انگشت کوچک خیلی خسته کننده نباشد و برای کسانی که دست هایشان از من بزرگتر است نیز کار کند.

مرحله 2: نمونه اولیه + کد

نمونه اولیه + کد
نمونه اولیه + کد

تمرین خوب این است که دکمه ها را روی تخته نان تست کنید. این بسیار ساده است ، فقط دکمه ها و مقاومت ها را همانطور که در تصویر نشان داده شده است وصل کنید. می توانید آن را با کد در اینجا (جایگزین پیوند pastebin) آزمایش کنید:

#عبارتند از

// از گزینه vthisv برای MacOS استفاده کنید:

// char ctrlKey = KEY_LEFT_GUI؛

// از گزینه vthisv برای Windows و Linux استفاده کنید:

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

// کلیدهای عملکرد در اینجا

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

const int pin = {9 ، 10 ، 11 ، 12 ، 13} ؛ // آرایه تمام پین های دکمه

// حساسیت

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 ؛

// فریم ها را فریز کنید

const int DELAY = 0؛

enum States {آزاد ، فشرده ، نگه داشته ، آزاد}}؛

دکمه ساختار {

پین int ؛ ایالتها ؛ int timeHeld ؛ }؛ // انگشت شست ، فهرست ، وسط ، حلقه ، کمی ؛

دکمه های دکمه [BUTTON_NUM] = {}؛

دکمه initButton (int p) {

دکمه b ؛ pinMode (p ، INPUT) ؛ b.pin = p؛ b.state = ایالات:: آزاد شد ؛ ب. timeHeld = 0 ؛ بازگشت b ؛ }

void setup () {

// کد راه اندازی خود را در اینجا قرار دهید تا یکبار اجرا شود: Serial.begin (9600)؛ Keyboard.begin ()؛

در حالی که (! سریال) {}؛

// دکمه های (int i = 0 ؛ i <(BUTTON_NUM) ؛ ++ i) {Serial.print ("دکمه تنظیم") ؛ Serial.print (i) ؛ Serial.print ("at pin:")؛ Serial.println (پین )؛ // دکمه های جنسی. پین = 1؛ دکمه ها = initButton (پین ) ؛ Serial.println (دکمه ها .pin)؛ }

}

bool readButton (int pin) {

// بررسی و حذف دکمه های if (digitalRead (pin) == HIGH) {تأخیر (10)؛ if (digitalRead (pin) == HIGH) {return true؛ }} false false؛ }

int pintobin (پین int) {

اگر (پین == پین [0]) 1 برگرداند ؛ اگر (پین == پین [1]) 10 را برگرداند ؛ اگر (پین == پین [2]) 100 را برگرداند ؛ اگر (پین == پین [3]) 1000 را برگرداند ؛ اگر (پین == پین [4]) 10000 برگرداند ؛ } button buttonStateUpdate (دکمه b) {

bool press = readButton (b.pin) ؛

switch (b.state) {case States:: freed: b.timeHeld = 0؛ if (مطبوعات) b.state = States:: pressed؛ زنگ تفريح؛ مورد فشرده شده است: b.timeHeld+= 1 ؛ if (مطبوعات) {if (b.timeHeld> (THRESH_1/(1+DELAY))) {b.state = States:: held؛ }} else {// if (b.timeHeld

int getButtonStateCode (دکمه b)

{بازگشت b.state*pintobin (b.pin) ؛ }

int getCodeByButton (کد int ، شاخص int) {

int r1 ، r2 ، r3 ، r4 ، r5 ؛ int opStep = BUTTON_NUM - (1+ شاخص) ؛

// اولین عملیات

if (opStep == 0) کد بازگشت/10000 ؛ r1 = کد٪ 10000 ؛

if (opStep == 1)

بازگشت r1/1000 ؛ r2 = r1 1000 1000 ؛ if (opStep == 2) r2/100 را برمی گرداند ؛ r3 = r2٪ 100 ؛ if (opStep == 3) r3/10 را برگرداند ؛ r4 = r3٪ 10 ؛ if (opStep == 4) r4/1 را برمی گرداند ؛ r5 = r4٪ 1 ؛ }

void completePress (پین int) {

// Serial.print ("ورودی") ؛ // Serial.println (پین) ؛ تأخیر (THRESH_3) ؛ Keyboard.releaseAll ()؛ }

void doAction (کد int) {

// اصلاح کننده ها اگر (getCodeByButton (کد ، 0) == 2) {// Serial.println ("--- اصلاح کننده ----") ؛ if (getCodeByButton (کد ، 1)> 0) {Keyboard.press (altKey) ؛ // Serial.println ("------- alt ---------") ؛ } else Keyboard.release (altKey) ؛ if (getCodeByButton (کد ، 2)> 0) {Keyboard.press (ctrlKey) ؛ // Serial.println ("-------- ctrl ----------") ؛ } else Keyboard.release (ctrlKey) ؛ if (getCodeByButton (کد ، 3)> 0) {Keyboard.press ('')؛ } else Keyboard.release ('')؛ if (getCodeByButton (کد ، 4)> 0) {Keyboard.press (shiftKey) ؛ // Serial.println ("------ تغییر ------") ؛ } else Keyboard.release (shiftKey) ؛ } دیگری {

// انجام وظایف

سوئیچ (کد) {مورد 30: // --- | Brush Keyboard.press (shiftKey) ؛ Keyboard.print ('b')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 300: // --- | Eraser Keyboard.press (shiftKey) ؛ Keyboard.print ('e')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 3000: // --- | Bucket Keyboard.press (shiftKey) ؛ Keyboard.print ('g')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 30000: // --- | Lasso Keyboard.press (shiftKey) ؛ Keyboard.print ('l')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 320: //-| o واگرد Keyboard.press (ctrlKey) ؛ Keyboard.print ('z')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 3020: //-| -o Redo Keyboard.press (ctrlKey) ؛ Keyboard.print ('y') ؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 30020: // | --o History Keyboard.press (shiftKey) ؛ Keyboard.print ('y') ؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 230: //-o | ذخیره Keyboard.press (ctrlKey) ؛ Keyboard.print ('s')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 3200: //- | o- صفحه کلید سریع PNG.press (shiftKey) ؛ Keyboard.press (ctrlKey) ؛ Keyboard.print ('\' ')؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 22230: // ooo | Fn1 Keyboard.press (Fn1Key) ؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 22320: // oo | o Fn2 Keyboard.press (Fn2Key) ؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 23220: // 0 | 00 Fn3 Keyboard.press (Fn3Key) ؛ کامل پرس (کد) ؛ زنگ تفريح؛ مورد 32220: // | ooo Fn4 Keyboard.press (Fn4Key) ؛ کامل پرس (کد) ؛ زنگ تفريح؛ }}} int f = 0؛ // ------------------ MAIN LOOP ------------------------- حلقه خالی () {

int buttonCode = 0؛

برای (int i = 0 ؛ i <BUTTON_NUM ؛ ++ i) {دکمه = buttonStateUpdate (دکمه ) ؛ buttonCode+= getButtonStateCode (دکمه ) ؛ }

if (buttonCode! = 0) {

Serial.print ("کد دکمه:") ؛ Serial.println (buttonCode) ؛ }

doAction (buttonCode) ؛

// کد اصلی خود را در اینجا قرار دهید ، تا بارها اجرا شود: // for (int i = buttons [0]؛ i <sizeof (buttons)/sizeof (buttons [0])+buttons [0]؛ ++ i) {/ / // if (readButton (i)) {// doAction (i)؛ //} //}

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

Keyboard.releaseAll ()؛

تاخیر (DELAY) ؛

}

در مورد منطق چیزهای زیادی برای گفتن وجود ندارد زیرا شبیه به آخرین کنترلر من است ، با دو تفاوت قابل توجه:

  1. دکمه ها با دستگاه های حالت خود سازه هستند
  2. حالات با هم جمع می شوند تا یک کد مشخص شود که عمل را تعیین می کند

این اصل شبیه تغییر بیت است ، اما از آنجا که دکمه ها دارای چندین حالت هستند و نمی توان آنها را به سادگی با یک باینری نشان داد ، در عوض در توان ده ضرب می شوند. سپس همه حالت های دکمه را در یک شماره واحد جمع می کنم و آن را به دستور () doAction () switch منتقل می کنم ، جایی که همه کد میانبرها را در آن قرار می دهم.

همانطور که می بینید ، من هر ترکیب احتمالی را ترسیم نکردم. من فقط چند مورد از میانبرهای مورد علاقه خود را اضافه کردم ، این را به شما می سپارم که بقیه را به بهترین شکل بنویسید.)

مرحله 3: پوشش

روکش
روکش
روکش
روکش
روکش
روکش

من برای چاپ از چاپگر سه بعدی استفاده کردم. همانطور که می بینید ، طراحی دارای ایراداتی است و من مجبور شدم راهی برای بستن آن داشته باشم. بنابراین من هنوز فایل مدل را ارسال نمی کنم.

دکمه ها روی "نیمکت ها" گرم چسبانده می شوند تا درپوش ها را در جای خود نگه دارند. دکمه های نرم نرم مخصوصاً در این مورد خوب هستند ، بنابراین اگر قصد دارید قاب مشابهی با من بسازید ، برخی از آنها را دریافت کنید.

همچنین ، پیشنهاد می کنم کمی وزن داخل کیس اضافه کنید ، زیرا بسیار سبک است. گرم اضافی باعث می شود نگه داشتن آن احساس طبیعی تری داشته باشد.

همه چیز را مطابق شکل لحیم کنید و کابل usb را وصل کنید ، و همه چیز باید در جای خود قرار گیرد (با کمک چسب)!

مرحله 4: نتیجه و بهبودهای احتمالی

نتیجه و بهبودهای احتمالی
نتیجه و بهبودهای احتمالی
نتیجه و بهبودهای احتمالی
نتیجه و بهبودهای احتمالی
نتیجه و بهبودهای احتمالی
نتیجه و بهبودهای احتمالی

آنجا شما آن را دارید! یک کنترل دستی که می توانید از آن برای دسترسی به تمام میانبرهای مهم خود تنها با یک دست استفاده کنید!

استفاده از آن نیاز به حافظه عضلانی دارد ، اما واقعاً همه کاره است!

البته این کامل نیست ، و در حال حاضر من در مورد راه هایی برای بهبود آن فکر می کنم. جدا از بهبود پوسته و افزودن میانبرها ، فکر می کنم جالب باشد که از چندین برنامه با میانبرهای مختلف پشتیبانی کنم. من در فکر داشتن یک ترکیب دکمه برای جابجایی بین طرح های کنترل هستم ، مانند فشردن همزمان 4 دکمه برای تغییر بین یک کتابخانه میانبر Photoshop به یک برنامه اختصاصی برای مایا.

فقط چند ایده.

ممنون که خواندید ، تا دفعه بعد!

توصیه شده: