Mundarija:
- 1 -qadam: Rejalashtirish
- 2 -qadam: Prototip + kod
- 3 -qadam: Koson
- 4 -qadam: natijalar va mumkin bo'lgan yaxshilanishlar
Video: Qo'l yorliqlarini boshqaruvchi (Photoshop + Ko'proq uchun) [Arduino]: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Oxirgi marta men Photoshop -da ishlatish uchun kichik boshqaruv panelini yaratdim. Bu mo''jizalar yaratdi va men hali ham foydalanaman! Ammo bu juda cheklangan, atigi beshta tugma va foydali o'lcham va shaffof terish. Men hali ham klaviaturaga juda ko'p intilayotganimni ko'rdim …
Shunday qilib, men boshqaruv panelining keyingi iteratsiyasi ustida ishlay boshladim, bittasi tugmachalari va funksionalligi bilan. Hammasini boshqarish uchun bitta boshqaruv paneli.
Bu boshqaruv paneli emas. Lekin qandaydir tarzda yaxshiroq bo'lishi mumkin.
Agar sizda juda ko'p yorliqlar bo'lishi mumkin bo'lsa -chi, lekin o'ta qulay va engil to'plamda siz uzluksiz rasm chizayotganda bo'sh qo'lingiz bilan ushlab tura olasizmi? … OK, infomercial bilan etarli.
Bu nazoratchi shunday dasturlashtirilganki, atigi 4 tugma yordamida uni 32 tagacha mumkin bo'lgan yorliqlar bilan bog'lash mumkin! Qo'shimcha 5-tugma, har qanday kombinatsiyada o'zgartiruvchi tugmachalardan foydalanishimga imkon beradi, bu ko'p dasturlar uchun foydalidir (siz hech qachon PS-da Alt-RMB kombinatsiyasini sinab ko'rdingizmi? Agar yo'q bo'lsa, iltimos, bajaring. Bu qutqaruvchi). Men tizimni keyinroq tushuntiraman.
Bularning barchasini bajarish uchun sizga kerak bo'ladi:
- 1 Mikrokontroller (men Adafruit ItsyBitsy 32u4 dan foydalanardim, lekin har kim atmega32u4 chipiga ega bo'lsa, shunday qilishi kerak)
- 1 ta micro-USB adapteri (ma'lumotlar faqat quvvat uchun emas)
- 5 ta tugma (men yumshoq tugmachalarni ishlatardim)
- 10k Ohmli rezistorlar (har bir tugma uchun 1 dona)
- Simlar, non paneli, lehim materiallari va boshqalar.
- Koson qilish uchun biror narsa (3D printer va boshqalar)
Bu o'rta darajadagi Arduino loyihasi va men nima bo'layotganini yaxshiroq tushunish uchun o'tgan darsligimni ko'rib chiqishni taklif qilaman, chunki bu erda men tushuntirgan narsalarimning takrorlanishi ko'p.
OK, boshlaylik!
1 -qadam: Rejalashtirish
Bu men boshqaruvchining asosiy sxemasi. Agar mening oldingi loyiham bilan solishtirsangiz, sxemasi juda oddiy! Ammo biz bir nechta tugmalar yordamida, kombinatsiyalangan presslar yordamida, bundan ham ko'proq narsani qila olamiz!
Boshqaruv sxemasining g'oyasi shundaki, har bir tugmani erkin, bosish va qo'yib yuborish yoki bosib ushlab turish mumkin. Bosish va qo'yib yuborish yorliqni faollashtiradi, tugmachalarni bosib ushlab turish esa bizga turli xil yorliqlarga kirish imkonini beradi. Agar siz faqat A tugmachasini bosgan bo'lsangiz, siz A yorlig'ini faollashtirasiz, lekin agar A tugmachasini bosib ushlab tursangiz, boshqa yorliq paydo bo'ladi. Siz bir vaqtning o'zida 3 tagacha tugmachani bosib turishingiz mumkin, shuning uchun siz bir nechta asosiy kombinatorikani qo'llaganingizda, bu tizimda nechta kombinatsiya bo'lishi mumkinligini ko'rasiz!
Qo'shimcha beshinchi tugma, men o'ylab topgan asbobning shakliga qarab, tabiiy qo'shimchalardek tuyuldi. Men uni Photoshop -dagi o'zgartirish tugmachalariga kirish uchun ishlatishga qaror qildim. Uning ishlash uslubi boshqa tugmalardan bir oz farq qiladi: bosh barmog'ini ushlab turganda faqat o'zgartirgichlar ishlatiladi. Ular ushlab turilganda faollashadi va bir nechta tugmani bosish mumkin. Shunday qilib, agar A tugmasi Shift va B tugmasi Ctrl bo'lsa, A va B tugmachalarini bosib ushlab tursangiz, bu Shift va Ctrl tugmachalarini bosishga o'xshaydi, lekin bosh barmog'i ushlab turilguncha!
Qobiq ham ergonomik, ham ikki tomonlama bo'lishga mo'ljallangan. Kichkina barmog'imni ishlatish juda zerikarli bo'lmasligi uchun uni mahkam bog'lab qo'yish uchun juda ehtiyot bo'ldim va bu qo'lim mendan kattaroq bo'lganlar uchun ishlashi kerak edi.
2 -qadam: Prototip + kod
Non panelidagi tugmachalarni sinab ko'rish yaxshidir. Bu juda oddiy, ko'rsatilganidek tugmachalarni va rezistorlarni ulang. Siz uni bu erda kod bilan sinab ko'rishingiz mumkin (pastebin havolasi muqobil):
#qo'shing
// MacOS uchun vthisv variantidan foydalaning:
// char ctrlKey = KEY_LEFT_GUI;
// Windows va Linux uchun vthisv variantidan foydalaning:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Bu erda funktsional tugmalar
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int pinlari = {9, 10, 11, 12, 13}; // barcha tugma pimlari qatori
// Sezuvchanlik
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;
// Ramkalarni muzlatish
const int DELAY = 0;
enum Shtatlar {ozod qilingan, bosilgan, ushlab turilgan, ozod qilingan};
tuzish tugmasi {
int pin; Shtatlar shtati; int timeHeld; }; // bosh barmog'i, ko'rsatkich, o'rta, halqa, kichkina;
tugmalar tugmalari [BUTTON_NUM] = {};
initButton tugmasi (int p) {
b tugmasi; pinMod (p, Kirish); b.pin = p; b.shtat = Shtatlar:: ozod qilingan; b.timeHeld = 0; qaytish b; }
bo'sh o'rnatish () {
// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying: Serial.begin (9600); Keyboard.begin ();
while (! Seriyali) {};
// tugmalari (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("sozlash tugmasi"); Serial.print (i); Serial.print ("pin:"); Serial.println (pinlar ); //tugmalar .pin = 1; tugmalar = initButton (pinlar ); Serial.println (tugmalar .pin); }
}
bool readButton (int pin) {
// tekshirish va o'chirish tugmalari, agar (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {true ga qaytish; }} false qaytarish; }
int pintobin (int pin) {
agar (pin == pinlar [0]) 1 qaytarsa; agar (pin == pinlar [1]) 10 qaytarsa; agar (pin == pinlar [2]) 100 qaytarsa; agar (pin == pinlar [3]) 1000 qaytarsa; agar (pin == pinlar [4]) 10000 qaytarsa; } tugmasiStateUpdate (b tugmasi) {
bool press = o'qish tugmasi (b.pin);
switch (b.state) {holatlar:: ozod qilingan: b.timeHeld = 0; if (press) b.state = Shtatlar:: pressed; tanaffus; ish bosildi: b.timeHeld+= 1; if (press) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = Shtatlar:: o'tkazilgan; }} boshqa {// if (b.timeHeld
int getButtonStateCode (b tugmasi)
{qaytish b.shtat*pintobin (b.pin); }
int getCodeByButton (int kod, int indeksi) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeks);
// birinchi operatsiya
agar (opStep == 0) qaytish kodi/10000; r1 =%10000 kodi;
agar (opStep == 1)
qaytarish r1/1000; r2 = r1%1000; agar (opStep == 2) r2/100 qaytarsa; r3 = r2%100; if (opStep == 3) r3/10 qaytarish; r4 = r3%10; agar (opStep == 4) r4/1 qaytarsa; r5 = r4%1; }
void completePress (int pin) {
// Serial.print ("kirish"); // Serial.println (pin); kechikish (THRESH_3); Keyboard.releaseAll (); }
void doAction (int code) {
// O'zgartiruvchilar if (getCodeByButton (kod, 0) == 2) {// Serial.println ("--- o'zgartiruvchilar ----"); 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); } boshqa {
// vazifalarni bajarish
switch (kod) {ish 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); tugmasini bosing (kod); tanaffus; ish 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); tugmasini bosing (kod); tanaffus; ish 3000: // --- | Kova klaviaturasi.press (shiftKey); Keyboard.print ('g'); tugmasini bosing (kod); tanaffus; ish 30000: // --- | Lasso Keyboard.press (shiftKey); Keyboard.print ('l'); tugmasini bosing (kod); tanaffus; Case 320: //-| o Keyboard.press-ni bekor qilish (ctrlKey); Keyboard.print ('z'); tugmasini bosing (kod); tanaffus; 3020-holat: //-| -o Keyo.tasvirni qaytarish (ctrlKey); Keyboard.print ('y'); tugmasini bosing (kod); tanaffus; ish 30020: // | --o Tarix klaviaturasi.press (shiftKey); Keyboard.print ('y'); tugmasini bosing (kod); tanaffus; ish 230: //-o | Keyboard.press -ni saqlash (ctrlKey); Keyboard.print (lar); tugmasini bosing (kod); tanaffus; ish 3200: //- | o- Tez-p.webp
int buttonCode = 0;
uchun (int i = 0; i <BUTTON_NUM; ++ i) {tugmalari = buttonStateUpdate (tugmalar ); buttonCode+= getButtonStateCode (tugmalar ); }
agar (buttonCode! = 0) {
Serial.print ("tugma kodi:"); Serial.println (buttonCode); }
doAction (tugma kodi);
// qayta ishga tushirish uchun asosiy kodingizni bu erga qo'ying: // for (int i = tugmalar [0]; i <sizeof (tugmalar)/sizeof (tugmalar [0])+tugmalar [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
agar (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
kechikish (kechikish);
}
Mantiq haqida ko'p narsa aytishning hojati yo'q, chunki u oxirgi nazoratchimnikiga o'xshaydi, ikkita farq bor:
- Tugmalar o'z davlat mashinalari bilan tuzilgan
- Shtatlar birgalikda harakatni belgilaydigan kodni tuzadi
Bu tamoyil bit-siljishga o'xshaydi, lekin tugmalar bir nechta holatga ega va ularni ikkilik bilan ifodalash mumkin emasligi sababli, ular o'rniga o'nta kuchga ko'paytiriladi. Keyin men tugmachalarning barcha holatlarini bitta raqamga qo'shaman va doAction () switch iborasiga o'tkazaman, bu erda men barcha yorliqlar kodini qo'yaman.
Ko'rib turganingizdek, men har qanday kombinatsiyani xaritaga kiritmaganman. Men faqat bir nechta sevimli yorliqlarni qo'shdim, qolganini siz xohlagan tarzda to'ldirishni o'z zimmangizga qoldiraman;)
3 -qadam: Koson
Men korpus uchun 3D printerdan foydalanardim. Ko'rib turganingizdek, dizaynda ba'zi kamchiliklar bor va men uni MacGyver -ga yopishga majbur bo'ldim. Men model faylini hozircha joylashtirmayman.
Tugmalar "skameykalarga" issiq yopishtiriladi, shunda ular qopqoqlarni joyida ushlab turadilar. Yumshoq tugmalar, ayniqsa, juda yaxshi, shuning uchun, agar siz menikiga o'xshash ish yasashni rejalashtirmoqchi bo'lsangiz, ulardan bir nechtasini oling.
Bundan tashqari, men korpusga ozgina og'irlik qo'shishni taklif qilaman, chunki u juda yengil. Qo'shimcha gramm uni ushlab turishni tabiiy qiladi.
Hammasini ko'rsatilgan tarzda lehimlang va usb kabelini ulang va hamma narsa joyiga to'g'ri kelishi kerak (elim yordamida)!
4 -qadam: natijalar va mumkin bo'lgan yaxshilanishlar
Mana sizda! Bir qo'li bilan barcha muhim yorliqlarga kirish uchun qo'lda boshqaruvchi!
Mushaklar xotirasini ishlatish kerak, lekin bu haqiqatan ham ko'p qirrali!
Albatta, bu mukammal emas va hozir men uni yaxshilashning ba'zi usullari haqida o'ylayapman. Qoplamani yaxshilash va yorliqlarni qo'shishdan tashqari, menimcha, turli xil yorliqlar bilan bir nechta ilovalarni qo'llab -quvvatlash qiziq bo'lardi. Boshqaruv sxemalari o'rtasida almashish uchun tugmalar birikmasiga ega bo'lishni o'ylayapman, masalan, bir vaqtning o'zida 4 tugmachani bosib, Photoshop yorliqlar kutubxonasini Maya uchun tayyorlangan bir kishiga almashtirish.
Faqat ba'zi fikrlar.
O'qiganingiz uchun tashakkur, keyingi safargacha!
Tavsiya:
Arduino klaviaturasi Joystick kengaytirgich qutisi va Deej yordamida ovozni boshqaruvchi narsa: 8 qadam
Arduino klaviaturasi Joystick kengaytirgichi va ovozni boshqaruvchi Deej -dan foydalanadigan narsa: Nega men bir muncha vaqt klaviaturaga interfeys elementlari yoki o'yinlar va simulyatorlardagi boshqa kichik vazifalarni boshqarish uchun kichik joystik qo'shishni xohlardim (MS Flight Sim, Elite: Xavfli, Yulduzli urushlar: eskadronlar va boshqalar). Shuningdek, Elita uchun: Xavfli, men
[Kiyiladigan sichqoncha] Windows 10 va Linux uchun Bluetooth-ga asoslangan kiyiladigan sichqonchani boshqaruvchi: 5 qadam
[Kiyiladigan sichqoncha] Windows 10 va Linux uchun Bluetooth-ga asoslangan taqiladigan sichqonchani boshqarish moslamasi: Men sichqoncha ko'rsatgichini boshqarish va kompyuter sichqonchasi bilan bog'liq operatsiyalarni hech qanday sirtga tegmasdan bajarish mumkin bo'lgan Bluetooth-ga asoslangan sichqoncha boshqaruvchisini yasadim. Qo'lqopga o'rnatilgan elektron sxemadan foydalanib, siz
Cheksiz aylanish Servo uchun oddiy elektron tezlikni boshqaruvchi (ESC): 6 qadam
Cheksiz aylanma servo uchun oddiy elektron tezlikni boshqarish moslamasi (ESC): Agar siz hozirda elektron tezlikni boshqarish moslamasini (ESC) taqdim qilmoqchi bo'lsangiz, siz qo'pol yoki jasur bo'lishingiz kerak. Arzon elektron ishlab chiqarish dunyosi turli funktsiyalarga ega turli xil sifat regulyatorlariga to'la. Shunga qaramay, do'stim mendan so'radi
NES boshqaruvchi uyali telefon uchun zaryadlovchi dok !!!: 7 qadam
NES -ni boshqaruvchi uyali telefonni zaryadlash uchun dock !!!: Men o'zimning NES -ni boshqaruvchi uyali telefonimni tugatdim va bu har doim eng zo'r narsa !!! Yo'qotilgan yagona narsa - zaryadlovchi qurilmasi, shuning uchun men o'zim tayyorladim
SMD Skillet Reflow uchun IQ haroratni boshqaruvchi: 4 qadam
SMD Skillet Reflow uchun IQ haroratni nazorat qilish moslamasi: agar siz SMD (sirtga o'rnatish moslamasi) yordamida o'z elektron platalaringizni qayta oqimga o'tkazmoqchi bo'lsangiz, bu ko'rsatma yordam beradi. Bir nechta taxtalarni qo'lda lehimlagandan so'ng, men o'zimni qiziqtira boshladim