Turinys:
- 1 žingsnis: planavimas
- 2 žingsnis: prototipas + kodas
- 3 žingsnis: korpusas
- 4 žingsnis: rezultatas ir galimi patobulinimai
Video: Rankinis nuorodų valdiklis („Photoshop +“) [Arduino]: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Paskutinį kartą sukūriau mažą valdymo bloką, skirtą naudoti „Photoshop“. Tai padarė stebuklus, ir aš vis dar jį naudoju! Tačiau jis taip pat yra gana ribotas - jame yra tik penki mygtukai ir naudingo dydžio bei neskaidrumo ratukai. Aš vis dar pastebėjau, kad daug pasiekiau klaviatūros …
Taigi aš pradėjau dirbti su kita valdymo bloko iteracija, viena su daugiau mygtukų ir funkcijų. Vienas valdymo pultas, skirtas juos visus valdyti.
Tai ne tas valdymo blokas. BET tam tikra prasme tai gali būti geriau.
Ką daryti, jei galėtumėte turėti daugybę nuorodų, tačiau itin patogioje ir lengvoje pakuotėje galite laikyti laisvą ranką, kol piešiate nenutrūkstamai? … gerai, užtenka informacijos.
Šis valdiklis yra užprogramuotas taip, kad vos 4 mygtukus galima susieti iki 32 galimų nuorodų! Papildomas 5 mygtukas yra tam, kad galėčiau naudoti modifikavimo klavišus bet kokiu deriniu, o tai naudinga daugeliui programų (ar kada nors bandėte „Alt-RMB“kombinaciją PS? Jei to nepadarėte, prašome tai padaryti. Tai gelbėja). Vėliau paaiškinsiu sistemą.
Norėdami visa tai padaryti, jums reikės:
- 1 mikrokontroleris (aš naudojau „Adafruit ItsyBitsy 32u4“, bet bet kuris turėtų veikti tol, kol turi atmega32u4 lustą)
- 1 „micro-USB“adapteris (duomenys, ne tik maitinimas)
- 5 mygtukai (naudojau minkštus, tokius kaip šie)
- 10k omų rezistoriai (1 mygtukui)
- Laidai, duonos lenta, litavimo medžiaga ir kt.
- Kažką padaryti korpusą (3D spausdintuvas ir pan.)
Tai yra vidutinio lygio „Arduino“projektas, ir siūlau pažvelgti į savo ankstesnę pamoką, kad geriau suprastumėte, kas vyksta, nes daug kas tai yra dalykų, kuriuos ten paaiškinau, kartojimas.
Gerai, pradėkime!
1 žingsnis: planavimas
Tai yra pagrindinė schema, kurią nupiešiau valdikliui. Grandinė yra tikrai paprasta, jei palyginsite ją su mano ankstesniu projektu! Bet mes galėsime nuveikti daug daugiau su keliais mygtukais, kuriuos jis turi, naudodami kombinuotus paspaudimus!
Valdymo schemos idėja yra ta, kad kiekvienas mygtukas gali būti laisvas, paspaustas ir atleistas arba paspaustas ir laikomas. Paspaudimas ir atleidimas iš tikrųjų suaktyvins nuorodą, o laikydami nuspaudę mygtukus suteiksime prieigą prie skirtingų nuorodų. Taigi, jei tik paspausite mygtuką A, suaktyvinsite spartųjį klavišą A, bet jei paspausite A laikydami nuspaudę B, gausite kitą nuorodą. Paspaudę vienu metu galite laikyti iki 3 mygtukų, taigi, kai pritaikysite keletą pagrindinių kombinacijų, pamatysite, kiek derinių galima naudojant šią sistemą!
Papildomas penktas mygtukas atrodė kaip natūralus priedas, atsižvelgiant į mano sugalvoto rankinio prietaiso formą. Aš nusprendžiau jį naudoti norėdamas pasiekti „Photoshop“modifikavimo klavišus. Jo veikimo būdas šiek tiek skiriasi nuo kitų mygtukų: kai laikomas nykščio mygtukas, bus naudojami tik modifikatoriai. Jie suaktyvinami, kai jie laikomi, ir galima paspausti kelis. Taigi, jei mygtukas A yra „Shift“, o mygtukas „B“- „Ctrl“, laikydami nuspaudę A ir B bus tarsi paspaudę „Shift“ir „Ctrl“, bet tik tol, kol bus laikomas nykščio mygtukas!
Korpusas suprojektuotas taip, kad būtų ergonomiškas ir daugialypis. Aš labai rūpinausi, kad jis būtų tvirtai prigludęs, kad mažojo piršto naudojimas nebūtų per daug varginantis ir kad jis tiktų ir tiems, kurių rankos didesnės už mano.
2 žingsnis: prototipas + kodas
Gera praktika yra išbandyti duonos lentos mygtukus. Tai gana paprasta, tiesiog prijunkite mygtukus ir rezistorius, kaip parodyta. Čia galite išbandyti kodą (alternatyva pastebin link):
#įtraukti
// naudokite „MacOS“parinktį „vthisv“:
// char ctrlKey = KEY_LEFT_GUI;
// naudokite „vthisv“parinktį „Windows“ir „Linux“:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Funkcijų klavišai čia
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int smeigtukai = {9, 10, 11, 12, 13}; // visų mygtukų kaiščių masyvas
// Jautrumas
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;
// Rėmelių užšaldymas
const int DELAY = 0;
enum States {išlaisvintas, spaudžiamas, laikomas, paleistas};
struktūros mygtukas {
int pin; Valstijos valstija; int timeHeld; }; // nykštys, rodyklė, vidurys, žiedas, mažas;
mygtukų mygtukai [BUTTON_NUM] = {};
mygtukas initButton (int p) {
mygtukas b; pinMode (p, INPUT); b.pin = p; b.valstybė = valstybės:: išlaisvinta; b. timeHeld = 0; grąža b; }
void setup () {
// įdėkite čia savo sąrankos kodą, kad paleistumėte vieną kartą: Serial.begin (9600); Klaviatūra.begin ();
while (! Serial) {};
// Mygtukai (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("nustatyti mygtuką"); Serijinis atspaudas (i); Serial.print ("ties pin:"); Serial.println (kaiščiai ); //buttons.pin = 1; mygtukai = initButton (kaiščiai ); Serial.println (mygtukai .pin); }
}
bool readButton (int pin) {
// tikrinimo ir atjungimo mygtukai, jei (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; }
int pintobin (int pin) {
if (smeigtukas == smeigtukai [0]) grąžina 1; if (smeigtukas == smeigtukai [1]) grąžina 10; if (smeigtukas == smeigtukai [2]) grąžina 100; if (smeigtukas == smeigtukai [3]) grąžina 1000; if (smeigtukas == smeigtukai [4]) grąžina 10000; } mygtukas buttonStateUpdate (mygtukas b) {
bool press = readButton (b.pin);
jungiklis (b.state) {atvejo būsenos:: išlaisvinta: b.timeHeld = 0; if (press) b.state = Būsenos:: presuotas; pertrauka; didžiosios ir mažosios raidės: b.timeHeld+= 1; if (paspauskite) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: held; }} else {// if (b.timeHeld
int getButtonStateCode (mygtukas b)
{return b.state*pintobin (b.pin); }
int getCodeByButton (int kodas, int indeksas) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeksas);
// pirmoji operacija
if (opStep == 0) grąžinimo kodas/10000; r1 = kodas%10000;
jei (opStep == 1)
grąža r1/1000; r2 = r1%1000; if (opStep == 2) return r2/100; r3 = r2%100; if (opStep == 3) return r3/10; r4 = r3%10; if (opStep == 4) return r4/1; r5 = r4%1; }
void completePress (int pin) {
// Serial.print ("įvestis"); // Serial.println (smeigtukas); vėlavimas (THRESH_3); Keyboard.releaseAll (); }
void doAction (int kodas) {
// Modifikatoriai if (getCodeByButton (kodas, 0) == 2) {// Serial.println ("--- modifiers ----"); if (getCodeByButton (kodas, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kodas, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kodas, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kodas, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ pamaina ------"); } else Keyboard.release (shiftKey); } Kitas {
// atlikti užduotis
jungiklis (kodas) {atvejis 30: // --- | Brush Keyboard.press (shiftKey); Keyboard.print ('b'); completePress (kodas); pertrauka; 300 atvejis: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); completePress (kodas); pertrauka; 3000 atvejis: // --- | Bucket Keyboard.press (shiftKey); Keyboard.print ('g'); completePress (kodas); pertrauka; atvejis 30000: // --- | „Lasso Keyboard.press“(„shiftKey“); Keyboard.print ('l'); completePress (kodas); pertrauka; 320 atvejis: //-| o Anuliuoti klaviatūrą.paspauskite (ctrlKey); Keyboard.print ('z'); completePress (kodas); pertrauka; atvejis 3020: //-| -o Redo Keyboard.press (ctrlKey); Keyboard.print ('y'); completePress (kodas); pertrauka; atvejis 30020: // | --o Istorijos klaviatūra.press (shiftKey); Keyboard.print ('y'); completePress (kodas); pertrauka; 230 atvejis: //-o | Išsaugoti Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kodas); pertrauka; atvejis 3200: //- | o- Greita-p.webp
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {mygtukai = buttonStateUpdate (mygtukai ); buttonCode+= getButtonStateCode (mygtukai ); }
if (buttonCode! = 0) {
Serial.print ("mygtuko kodas:"); Serial.println (buttonCode); }
doAction (buttonCode);
// įdėkite čia savo pagrindinį kodą, kad jis būtų paleistas pakartotinai: // for (int i = mygtukai [0]; i <sizeof (mygtukai)/sizeof (mygtukai [0])+mygtukai [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
if (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
uždelsimas (DELAY);
}
Nėra daug ką pasakyti apie logiką, nes ji panaši į mano paskutinio valdiklio logiką, turinti du pastebimus skirtumus:
- Mygtukai yra sukurti naudojant savo būsenos mašinas
- Būsenos apibendrinamos, kad būtų sukurtas veiksmą lemiantis kodas
Principas yra panašus į bitų perkėlimą, tačiau kadangi mygtukai turi kelias būsenas ir negali būti tiesiog atvaizduojami dvejetainiu, jie dauginami iš dešimties galių. Tada sudedu visas mygtukų būsenas į vieną skaičių ir perkeliu jas į „doAction ()“jungiklio teiginį, kuriame įdedu visus nuorodų kodus.
Kaip matote, nenužymėjau visų galimų derinių. Pridėjau tik kelis mėgstamiausius sparčiuosius klavišus, palieku jums patiems užpildyti, kaip jums atrodo geriau;)
3 žingsnis: korpusas
Korpusui naudojau 3D spausdintuvą. Kaip matote, dizainas turi tam tikrų trūkumų, ir aš turėjau „MacGyver“jį tiesiog uždaryti. Taigi modelio failo dar neskelbsiu.
Mygtukai yra karštai priklijuoti prie „suoliukų“, kad dangteliai būtų laikomi vietoje. Minkšti mygtukai yra ypač geri, todėl būtinai įsigykite kai kuriuos iš jų, jei planuojate pagaminti panašų į mano dėklą.
Taip pat siūlau pridėti šiek tiek svorio dėklo viduje, nes jis yra labai lengvas. Papildomi gramai laikys jį natūraliau.
Lituokite viską, kaip parodyta, ir prijunkite USB kabelį, ir viskas turėtų tilpti į vietą (naudojant tam tikrus klijus)!
4 žingsnis: rezultatas ir galimi patobulinimai
Štai ir turi! Rankinis valdiklis, kurį galite naudoti norėdami pasiekti visus svarbius sparčiuosius klavišus tik viena ranka!
Tam reikia raumenų atminties, tačiau ji tikrai universali!
Žinoma, tai nėra tobula, ir dabar galvoju apie keletą būdų, kaip tai pagerinti. Be korpuso tobulinimo ir nuorodų pridėjimo, manau, kad man būtų įdomu palaikyti kelias programas naudojant skirtingus sparčiuosius klavišus. Aš galvoju turėti mygtukų derinį, kad perjungtumėte valdymo schemas, pvz., Vienu metu paspausdami 4 mygtukus, kad perjungtumėte „Photoshop“sparčiųjų klavišų biblioteką į vieną pritaikytą „Maya“.
Tik keletas idėjų.
Ačiū, kad skaitote, iki kito karto!
Rekomenduojamas:
„Arduino“rankinis ventiliatorius su talpiniu jutikliniu jungikliu: 6 žingsniai
„Arduino“rankinis ventiliatorius su talpiniu jutikliniu jungikliu. Šioje pamokoje sužinosime, kaip įjungti ir išjungti „Hendheld“akumuliatoriaus ventiliatorių naudojant talpinį jutiklinį jutiklį, relės modulį ir „Visuino“. Žiūrėkite demonstracinį vaizdo įrašą
Rankinis „Arduino“popierinių akmenų žirklių žaidimas naudojant 20x4 skystųjų kristalų ekraną su I2C: 7 žingsniai
Rankinis „Arduino“popierinių uolų žirklių žaidimas naudojant 20x4 skystųjų kristalų ekraną su I2C: Sveiki visi, o gal turėčiau pasakyti „Labas pasaulis!“Būtų labai malonu su jumis pasidalyti projektu, kuris buvo mano įėjimas į daugelį „Arduino“dalykų. Tai rankinis „Arduino“popierinių uolienų žirklių žaidimas, naudojant I2C 20x4 skystųjų kristalų ekraną. Aš
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis - „Arduino PS2“žaidimų valdiklis - Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino“žaidimų pultą: 7 žingsniai
„Arduino“pagrindu sukurtas „pasidaryk pats“žaidimų valdiklis | „Arduino PS2“žaidimų valdiklis | Žaidimas „Tekken“naudojant „pasidaryk pats“„Arduino Gamepad“: Sveiki, vaikinai, žaisti žaidimus visada smagu, tačiau žaisti su savo „pasidaryk pats“žaidimo valdikliu yra smagiau. Taigi, mes padarysime žaidimų valdiklį naudodami „arduino pro micro“šioje instrukcijoje
Nešiojamojo kompiuterio nuorodų dėžutė: 3 žingsniai (su nuotraukomis)
Nešiojamojo kompiuterio nuorodų dėžutė: Medžiagos: mazgas MCU esp8266 Breadboard 5x 6mm mygtukų jungikliai ⅛ ” faneros lakštas 3mm akrilo plastiko lakštas 11x laidai Lituoklis + lituoklis Lazerinis pjaustytuvas Karštas klijai Medienos klijai Medžio gręžtuvas
YABC - dar vienas „Blynk“valdiklis - „IoT“debesų temperatūros ir drėgmės valdiklis, ESP8266: 4 žingsniai
YABC - Dar vienas „Blynk“valdiklis - „IoT“debesų temperatūros ir drėgmės valdiklis, ESP8266: Sveiki, kūrėjai, neseniai pradėjau auginti grybus namuose, austrių grybus, bet jau turiu 3 kartus šių valdiklių namuose, kad galėčiau kontroliuoti savo namų alaus fermentacijos temperatūrą, žmona dabar taip pat daro šį „Kombucha“dalyką ir yra šilumos termostatas