Mundarija:

Photoshop uchun mini boshqaruv paneli (Arduino): 6 qadam
Photoshop uchun mini boshqaruv paneli (Arduino): 6 qadam

Video: Photoshop uchun mini boshqaruv paneli (Arduino): 6 qadam

Video: Photoshop uchun mini boshqaruv paneli (Arduino): 6 qadam
Video: TX81Z Arduino MIDI-контроллер/редактор 2024, Noyabr
Anonim
Photoshop uchun mini boshqaruv paneli (Arduino)
Photoshop uchun mini boshqaruv paneli (Arduino)

Men sizga Photoshop -da tezroq ishlashga yordam beradigan qanday qilib kichik asbob yasashni ko'rsataman!

PS uchun maxsus ishlab chiqarilgan klaviatura yangi emas, lekin ular menga kerakli narsani taklif qilmaydi. Rassom sifatida men Photoshop -da ko'p vaqtimni cho'tka sozlamalarini to'g'rilashga sarflayman va menimcha, oddiy yorliq tugmalari ish jarayonimga mos keladigan boshqaruvni bermaydi. Shunday qilib, men har doim xohlagan analog shovqinni berish uchun o'zimga mos keladigan kichik va klaviaturani o'zim qilishga qaror qildim.

Ishlash usuli oddiy: mikrokontroller Photoshop bilan o'zaro aloqada bo'lishi uchun biz standart yorliqlardan foydalanamiz. Kompyuter klaviatura/sichqoncha sifatida o'qiy oladigan taxtada, biz kompyuterga har bir kirishni tugmalar bosish kombinatsiyasi sifatida o'qishini aytish uchun oddiy kod satrlaridan foydalanishimiz kifoya. Endi bekor qilish tugmasi faqat tugmani bosishdir!

Qani boshladik! Ushbu loyiha uchun sizga kerak bo'ladi:

  • 1 Sparkfun ProMicro (yoki Arduino Leonardo, tavsiya etilmaydi)
  • 1 ta USB-adapter
  • 6 ta tugma (yoki sizga yoqqan raqam)
  • 10k Ohmli rezistorlar (har bir tugma uchun 1)
  • 1 potansiyometr
  • 1 aylanadigan kodlovchi
  • simlar, non paneli, perfboard, lehim, sarlavha pinlari va boshqalar.

Siz bu loyiha uchun Arduino Leonardodan foydalanishingiz mumkin, lekin ProMicro ancha arzon alternativa bo'lib, u xuddi shu atmega32u4 chipini ishlatadi, pimlari ko'proq va ancha kichikroq bo'ladi, bu esa klaviatura uchun juda mos keladi.

ProMicro -ni Arduino IDE -da dasturlash uchun avval ba'zi narsalarni sozlash kerak bo'ladi. Siz bu haqda ko'proq SparkFun qo'llanmasida o'qishingiz mumkin:

Agar kompyuterda qurilmani topishda muammo bo'lsa, siz foydalanayotgan micro-USB faqat quvvat manbai emasligiga va ma'lumot uzatishni qo'llab-quvvatlayotganiga ishonch hosil qiling.

Bu mening birinchi Arduino loyiham va yangi boshlanuvchilar uchun mos.

1 -qadam: boshqaruv panelini prototiplash

Boshqarish panelini prototiplash
Boshqarish panelini prototiplash

Lehimlashni boshlashdan oldin dasturingizni non panelida sinab ko'rishingizni maslahat beraman.

Bu erda siz mening sxemamni ko'rishingiz mumkin.

1 va 2 -tugmachalarni qaytarish va qaytarish bo'ladi, 3 dan 5 gacha cho'tka, o'chirgich va lasso asboblari uchun, 6 -tugma - bu tezkor saqlash tugmasi. Enkoder va potmetr mos ravishda O'lcham va shaffoflikni boshqaradi.

E'tibor bering, men chap qo'limman va tartibni men uchun eng qulay tarzda ishlab chiqdim. O'zingizning taxtangizdan foydalangan paytingizni tekshirgichning qaysi funktsiyalari bilan ishlashni xohlayotganingizni, qaysi biri sizga eng mos kelishini va oxir -oqibat sizga qo'shimcha qismlar kerak bo'lsa, o'ylab ko'ring.

2 -qadam: tugmachalarni bosing

Tugmalar
Tugmalar

Tugmalar eng sodda tarzda amalga oshiriladi. Keling, kodni ko'rib chiqaylik:

#qo'shing

const int tugmalari = {2, 3, 4, 5, 6, 7, 8, 9}; // barcha tugma pimlari qatori char ctrlKey = KEY_LEFT_GUI; // Windows va Linux uchun ushbu parametrdan foydalaning: // char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT; void setup () {// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying: Serial.begin (9600); Keyboard.begin (); // Tugmalar - qatorni aylantirib, (int i = tugmalari [0]; i <(o'lchamlari (tugmalari)/o'lchamlari (tugmalari [0]))+tugmalari [0]; ++ i) {ni bosilishini tekshiring. pinMode (i, INPUT); }} boolean readButton (int pin) {// tugmalarni tekshirish va o'chirish, agar (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {true ga qaytish; }} false qaytarish; } void doAction (int pin) {// vazifalarni bajarish tugmasi (pin) {// ---- Yorliqlar ---- // 4-ishni bekor qilish: Keyboard.press (ctrlKey); Keyboard.print ('z'); Serial.print ("kirish"); Serial.println (pin); kechikish (200); Keyboard.releaseAll (); tanaffus; // 5 -ishni takrorlash: Keyboard.press (ctrlKey); Keyboard.print ('y'); Serial.print ("kirish"); Serial.println (pin); kechikish (200); Keyboard.releaseAll (); tanaffus; // 6 -cho'tka qutisi: Keyboard.press ('b'); Serial.print ("kirish"); Serial.println (pin); kechikish (200); Keyboard.releaseAll (); tanaffus; // Silgi 7 -holat: Keyboard.press ('e'); Serial.print ("kirish"); Serial.println (pin); kechikish (200); Keyboard.releaseAll (); tanaffus; // Lasso 8 -holat: Keyboard.press ('l'); Serial.print ("kirish"); Serial.println (pin); kechikish (200); Keyboard.releaseAll (); tanaffus; // 9 -holatni saqlash: Keyboard.press (ctrlKey); Keyboard.print (lar); Serial.print ("kirish"); Serial.println (pin); kechikish (200); Keyboard.releaseAll (); tanaffus; standart: Keyboard.releaseAll (); tanaffus; }}

void loop () {

// qayta ishga tushirish uchun asosiy kodingizni bu erga qo'ying:

for (int i = tugmalari [0]; i <sizeof (tugmalar)/sizeof (tugmalar [0])+tugmalari [0]; ++ i) {if (readButton (i)) {doAction (i); }} // Keyboard.releaseAll () modifikatorlarini qayta o'rnatish;

}

Ular ancha sodda. Kompyuterni tugmachani bosish sifatida tan olish uchun biz faqat Keyboard.press () funktsiyasidan foydalanamiz. Qayta tiklash tugmachasini (ctrl+z) faollashtirish uchun biz faqat Keyboard.press (ctrlKey) va keyin Keyboard.press ('z') dan foydalanamiz. Esda tutingki, bu funktsiyalarga kirish uchun Keyboard.h va klaviaturani ishga tushirish kerak bo'ladi.

Kirish pinlari massivda saqlanadi, shuning uchun hammasini loop () funktsiyasida osongina aylantirish mumkin. Massivning butun hajmini massiv elementiga, shuningdek bitta elementga bo'lish orqali c ++ da kirish va massiv uzunligiga kirishning oson usullaridan biri. Biz tugmalar bosilganligini tekshirish uchun barcha tugmachalarni aylantiramiz.

Vazifalarni tartibga solish uchun men tugmachaning barcha harakatlarini pin raqamini argument sifatida qabul qiladigan funktsiyani almashtirishda saqladim.

Agar siz tugmalaringiz boshqacha bajarilishini xohlasangiz yoki boshqa tugmalar qo'shishni xohlasangiz, doAction funktsiyasining mazmunini tahrir qiling!

Jismoniy tugmalar qanday ishlashi tufayli biz ularni o'chirib tashlashimiz kerak bo'ladi. Bu dastur tugmachalarning bahorligi tufayli kerak bo'lmagan bosishni o'qishining oldini olish uchun qilingan. Buning ko'p usullari bor, lekin men bunga g'amxo'rlik qiladigan oddiy readButton () funktsiyasini qo'shdim.

Tugmalaringizni 10k rezistorlar bilan bog'lang va siz oltin bo'lishingiz kerak!

3 -qadam: Potansiyometr

Potentsiometr
Potentsiometr

Endi potmetrga o'ting:

#qo'shing

int terish0 = 0; void setup () {// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying: Serial.begin (9600); Keyboard.begin (); // terish terish0 = analogRead (0); terish0 = xarita (terish0, 0, 1023, 1, 20); } void dialAction (int dial, int newVal, int lastVal) {switch (terish) {// Shaffoflik holati 0: kechiktirish (200); if (newVal! = lastVal) {int decim = ((newVal*5)/10); int birligi = ((newVal *5)% 10); if (newVal == 20) {Keyboard.write (48+0); Keyboard.write (48+0); Serial.println ("maksimal terish 1"); } else {decim = constrain (desim, 0, 9); birlik = cheklash (birlik, 0, 9); Serial.println (newVal*2); Keyboard.write (48+desim); Keyboard.write (48+birlik); }} terish0 = yangiVal; tanaffus; standart: tanaffus; }} // ------------------ ASOSI LOOP ------------------------- bekor loop () {// asosiy kodingizni bu erga qo'ying, qayta -qayta ishga tushiring: // Opacity // delay (500); int val0 = analogRead (0); val0 = xarita (val0, 0, 1023, 1, 20); //Serial.print ("terish0:"); //Serial.println(val0); if (val0! = dial0) {// dialAction (0, val0, dial0) biror narsa qiling; }}

Potmetr xuddi shu mantiqqa amal qiladi, lekin bu biroz murakkabroq.

Birinchidan, biz qanday ishlashini xohlayotganimizni ko'rib chiqaylik: Photoshop -da cho'tkaning shaffofligini o'zgartirish uchun qulay yorliqlar mavjud. Agar biron -bir raqamli tugmani bossangiz, shaffoflik bu raqamga teng bo'ladi*10. Ammo agar siz ikkita raqamni bossangiz, u ikkinchi raqamni birlik sifatida o'qiydi, bu sizga aniqroq nazoratni beradi.

Shunday qilib, biz potmetrimiz aylanishning foizini ko'rsatishini xohlaymiz, lekin biz buni doimo qilmoqchi emasmiz, chunki bu ahmoqlik. Biz faqat shaffoflikni potmetr aylantirilganda o'zgartirmoqchimiz. Shunday qilib, biz analogRead () qiymati bilan solishtiradigan qo'shimcha qiymatni saqlaymiz va faqat farq mavjud bo'lganda harakat skriptini ishga tushiramiz.

Biz duch keladigan yana bir muammo - analogRead -ning qaytish int -ni kirish usuliga aylantirish. Intni mag'lubiyatga aylantirishning oson yo'li yo'qligi uchun biz intning o'zidan foydalanishimiz kerak bo'ladi. Ammo, agar siz Keyboard.press (int) ni yozsangiz, kirish siz xohlagan darajada bo'lmasligini va uning o'rniga boshqa tugma bosilishini sezasiz.

Buning sababi shundaki, klaviatura tugmachalari butun sonlar sifatida kodlangan va har bir kalit o'z indeksiga ega. Num tugmachasini to'g'ri ishlatish uchun siz ularning indeksini ASCII jadvalidan qidirishingiz kerak bo'ladi:

Ko'rib turganingizdek, raqamli tugmalar 48 -indeksdan boshlanadi. Shunday qilib, to'g'ri tugmachani bosish uchun biz terish qiymatini 48 ga qo'shishimiz kerak bo'ladi. O'nli kasr va birlik qiymatlari alohida bosishdir.

Nihoyat, bizga qiymatni oldinga va orqaga sakrab o'tmaslik uchun yo'l kerak. Chunki, agar siz xaritali (val0, 0, 1023, 0, 100) terishni ishlatishga harakat qilsangiz, natijalar juda jirkanch bo'ladi. Xuddi biz tugmachalarni qanday o'chirib tashlaganimiz kabi, biz ham aniqlikni yo'qotib, buni tuzatamiz. Men buni 1-20 gacha xaritalash va keyin argumentlar qiymatini 5 ga ko'paytirishni maqbul kelishuv deb topdim.

Potansiyometrni ulash uchun 5V simni, topraklama simini va analog kirish simini ulash kifoya va hech qanday muammo bo'lmasligi kerak.

Qiziqarli fakt: agar siz Lasso kabi asbob tanlangan bo'lsa, bu yorliqdan foydalansangiz, u qatlam qatlamining shaffofligini o'zgartiradi. E'tibor qilish kerak bo'lgan narsa.

4 -qadam: Rotary Enkoder

Rotary kodlovchi
Rotary kodlovchi

Aylanadigan enkoderlar potentsiometrlarga o'xshaydi, lekin ular qancha burilishlari mumkinligi chegaralanmagan. Analog qiymat o'rniga biz kodlovchining burilish yo'nalishini raqamli tarzda ko'rib chiqamiz. Men bularning qanday ishlashini batafsil tushuntirmayman, lekin bilishingiz kerakki, u arduino -dagi ikkita kirish pimidan qaysi tomonga burilganligini aytib beradi. Aylanadigan kodlovchi bilan ishlash qiyinroq bo'lishi mumkin, har xil kodlovchilar turli xil sozlamalarni talab qilishi mumkin. Vaziyatni engillashtirish uchun men PCB bilan sotib oldim. Endi kod:

#qo'shing

// Rotary enkoder #define chiqishA 15 #define chiqishB 14 int counter = 0; int aState; int aLastState; void setup () {// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying: // Rotary pinMode (outputA, INPUT); pinMode (chiqishB, Kirish); // outputA aLastState = digitalRead (outputA) ning dastlabki holatini o'qiydi; } void rotaryAction (int dir) {if (dir> 0) {Keyboard.press (']'); } boshqa {Keyboard.press ('['); } Keyboard.releaseAll (); } // ------------------ ASOSI LOOP ------------------------- bo'shliq pastadir () {// asosiy kodingizni bu erga qo'ying, qayta -qayta ishga tushiring: // Size aState = digitalRead (outputA); if (aState! = aLastState) {if (digitalRead (outputB)! = aState) {// counter ++; rotaryAction (1); } boshqa {// hisoblagich -; rotaryAction (-1); } //Serial.print("Pozitsiya: "); //Serial.println(hisoblagich); } aLastState = aState; }

Odatiy bo'lib, Photoshop -ning] va [yorliqlari cho'tka hajmini oshiradi va kamaytiradi. Xuddi avvalgidek, biz ularni tugmachalarni bosish sifatida kiritmoqchimiz. Enkoder o'z navbatida bir nechta kirishni yuboradi (bu modelga bog'liq) va biz har bir kirish uchun cho'tka hajmini kattalashtirmoqchimiz/kamaytirmoqchimiz, shuning uchun siz tezlikni yuqoriga yoki pastga tez aylantira olasiz, lekin sekinlik bilan aniqlik bilan boshqaring.

Xuddi potmetrda bo'lgani kabi, biz faqat kadran aylantirilganda harakatni bajarishni xohlaymiz. Potmetrdan farqli o'laroq, yuqorida aytib o'tganimdek, aylanadigan kodlovchi ikkita o'zgaruvchan kirishga ega. Biz terish yo'nalishini aniqlash uchun qaysi biri o'zgarganini ko'rib chiqamiz.

Keyin yo'nalishga qarab, biz to'g'ri tugmani bosamiz.

Agar sizda aloqa muammolari bo'lmasa, u ishlashi kerak.

5 -qadam: Hammasini bir joyga to'plash

Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash
Hammasini bir joyga to'plash

Endi lehimga. Birinchidan, biz ikkita terish moslamasi uchun perforatorga ikkita teshik ochamiz. biz tugmachalarni va ularga tegishli rezistorlarni lehimlaymiz. Men ikkita qo'shimcha kichik teshik ochdim, ular ostidagi joyni tejash uchun kirish simlarini tepadan o'tkazib yuborishdi, lekin bu shart emas. Kirish simlari ko'p emas, shuning uchun GND va 5V simlari parallel ishlaydi, lekin agar siz o'zingizni hiyla -nayrang his qilsangiz, matritsa yasashingiz mumkin. Men mikrokontrolderni kodlagich va potmetrning yoniga mos keladigan, kichikroq perford taxtasiga lehimladim. Endi men barcha simlarni ProMicro -ga lehimlayman. Ijodiy bo'lishga hojat yo'q, men faqat non panelidagi sxemaga amal qilishim kerak edi, lekin bunday kichkina joyda lehimlash zerikarli bo'lishi mumkin. Menga o'xshamang, simni yechuvchi va yaxshi lehimdan foydalaning!

Va nihoyat, siz yangi Photoshop do'stingiz uchun yaxshi sumka yasashingiz mumkin. Hech bo'lmaganda menikidan yaxshiroq!

Ammo, agar siz buni sinab ko'rmoqchi bo'lsangiz, karton va lentadan foydalaning va mikro USB-ni ulang.

6 -qadam: Kod + Namoyish

Image
Image

Kutilmagan hodisalardan saqlanish uchun loyihada harakatlanayotganda boshqaruv paneli dasturini sinab ko'ring!

Bu erda to'liq kod:

O'qiganingiz uchun katta rahmat!

Tavsiya: