Sisukord:
- Samm: planeerimine
- 2. samm: prototüüp + kood
- 3. samm: kest
- 4. samm: tulemus ja võimalikud parandused
Video: Käeshoitav otseteekontroller (Photoshop + jaoks) [Arduino]: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Viimati lõin Photoshopis kasutamiseks pisikese juhtimispuldi. See tegi imesid ja ma kasutan seda siiani! Kuid see on ka üsna piiratud, vaid viie nupuga ning kasuliku suuruse ja läbipaistmatuse ketastega. Leidsin end ikka palju klaviatuuri poole sirutamas …
Nii hakkasin töötama järgmise juhtimispuldi iteratsiooni kallal, kus oli palju rohkem nuppe ja funktsioone. Üks juhtimispult nende kõigi juhtimiseks.
See pole see juhtimispult. AGA mõnes mõttes võib see olla parem.
Mis siis, kui teil oleks palju otseteid, kuid ülimalt mugavas ja kergemas pakendis saate katkestusteta joonistades vaba käega kinni hoida? … Ok, piisab infomaterjalist.
See kontroller on programmeeritud nii, et vaid 4 nupuga saab selle kaardistada kuni 32 võimalikuks otseteeks! Täiendav viies nupp on selleks, et saaksin kasutada muuteklahve suvalises kombinatsioonis, mis on kasulik paljudele programmidele (kas olete kunagi proovinud PS-is Alt-RMB kombinatsiooni? Kui te pole seda teinud, palun tehke seda. See on elupäästja). Ma selgitan süsteemi hiljem.
Selle kõige tegemiseks vajate:
- 1 mikrokontroller (kasutasin Adafruit ItsyBitsy 32u4, kuid igaüks peaks seda tegema seni, kuni sellel on atmega32u4 kiip)
- 1 mikro-USB-adapter (andmed, mitte ainult toide)
- 5 vajutusnuppu (ma kasutasin selliseid pehmeid)
- 10 kΩ takistid (1 nupu kohta)
- Juhtmed, leivaplaat, jootematerjal jne.
- Midagi korpuse valmistamiseks (3D -printer jne)
See on keskastme Arduino projekt ja ma soovitan vaadata oma varasemat õpetust, et paremini aru saada, mis toimub, kuna suur osa sellest kordab neid asju, mida ma seal selgitasin.
Ok, alustame!
Samm: planeerimine
See on kontrolleri põhiskeem. Ahel on tõesti lihtne, kui võrrelda seda minu eelmise projektiga! Kuid me suudame kombineeritud presside abil teha palju rohkem selle nuppude abil!
Juhtimisskeemi idee seisneb selles, et iga nupp võib olla vaba, vajutatud ja vabastatud või all hoitud. Vajutamine ja vabastamine on see, mis otsetee tegelikult aktiveerib, samal ajal kui nuppe all hoides saame juurdepääsu erinevatele otseteedele. Nii et kui vajutate lihtsalt nuppu A, aktiveerite otsetee A, kuid kui vajutate nuppu B vajutades, saate teistsuguse otsetee. Vajutades saate vajutada korraga kuni 3 nuppu, nii et kui kasutate mõnda põhilist kombinatoorikat, näete, kui palju kombinatsioone on selle süsteemiga võimalik teha!
Täiendav viies nupp tundus loomuliku lisandina, arvestades pihuarvuti kuju, mille ma välja mõtlesin. Otsustasin seda kasutada Photoshopis muutmisvõtmete juurde pääsemiseks. Selle toimimisviis erineb pisut teistest nuppudest: kui pöidla nuppu all hoitakse, kasutatakse ainult modifikaatoreid. Need aktiveeruvad, kui neid hoitakse ja mitut saab vajutada. Nii et kui nupp A on tõstuklahv ja nupp B on Ctrl, siis kui hoiate all klahve A ja B, on see sama, mis vajutades nii tõstuklahvi kui ka klahvi Ctrl, kuid ainult seni, kuni pöidla nuppu all hoitakse!
Kest on disainitud nii ergonoomiliseks kui ka kahepoolseks. Hoolitsesin selle eest, et see sobiks tihedalt nii, et väikese sõrme kasutamine ei oleks liiga väsitav ja see peaks toimima ka neil, kellel on minust suuremad käed.
2. samm: prototüüp + kood
Hea tava on testida leivalaua nuppe. See on üsna lihtne, lihtsalt ühendage nupud ja takistid, nagu näidatud. Saate seda siin koodiga testida (pastebin link alternatiiv):
#kaasake
// kasuta MacOS -i jaoks vthisv valikut:
// char ctrlKey = KEY_LEFT_GUI;
// kasuta suvandit vthisv Windowsi ja Linuxi jaoks:
char ctrlKey = KEY_LEFT_CTRL; char shiftKey = KEY_LEFT_SHIFT; char altKey = KEY_LEFT_ALT;
// Funktsiooniklahvid siin
char Fn1Key = KEY_F2; char Fn2Key = KEY_F3; char Fn3Key = KEY_F4; char Fn4Key = KEY_F5;
const int tihvtid = {9, 10, 11, 12, 13}; // kõigi nööpnõelte massiiv
// Tundlikkus
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;
// Raamide külmutamine
const int DELAY = 0;
enum States {vabastatud, pressitud, hoitud, vabastatud};
struktuuri nupp {
int pin; Osariigid; int timeHeld; }; // pöial, indeks, keskel, rõngas, väike;
nupunupud [BUTTON_NUM] = {};
nupp initButton (int p) {
nupp b; pinMode (p, INPUT); b.pin = p; b.riik = osariigid:: vabastatud; b. timeHeld = 0; tagasitulek b; }
tühine seadistus () {
// pange oma seadistuskood siia, et üks kord käivitada: Serial.begin (9600); Klaviatuur.begin ();
while (! Seeria) {};
// Nupud (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("set button"); Seeriatrükk (i); Serial.print ("pin:"); Serial.println (tihvtid ); //nupud.pin = 1; nupud = initButton (tihvtid ); Serial.println (nupud .pin); }
}
bool readButton (int pin) {
// kontrollimise ja tagasilükkamise nupud, kui (digitalRead (pin) == HIGH) {delay (10); if (digitalRead (pin) == HIGH) {return true; }} return false; }
int pintobin (int pin) {
if (pin == tihvtid [0]) tagastab 1; if (pin == tihvtid [1]) tagastab 10; if (pin == tihvtid [2]) tagastab 100; if (pin == tihvtid [3]) tagastab 1000; if (pin == tihvtid [4]) tagastab 10000; } nupp buttonStateUpdate (nupp b) {
bool press = readButton (b.pin);
lüliti (b.riik) {juhtumi olekud:: vabastatud: b.timeHeld = 0; if (press) b.state = Olekud:: pressitud; murda; korpust vajutatud: b.timeHeld+= 1; if (vajutage) {if (b.timeHeld> (THRESH_1/(1+DELAY)))) {b.state = States:: held; }} muu {// kui (b.timeHeld
int getButtonStateCode (nupp b)
{return b.state*pintobin (b.pin); }
int getCodeByButton (int -kood, int -indeks) {
int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (1+indeks);
// esimene operatsioon
if (opStep == 0) tagastuskood/10000; r1 = kood%10000;
kui (opStep == 1)
tagasitulek r1/1000; r2 = r1%1000; if (opStep == 2) tagasta r2/100; r3 = r2%100; if (opStep == 3) tagasta r3/10; r4 = r3%10; if (opStep == 4) tagasta r4/1; r5 = r4%1; }
void completePress (int pin) {
// Serial.print ("sisend"); // Serial.println (pin); viivitus (THRESH_3); Keyboard.releaseAll (); }
void doAction (int -kood) {
// Modifikaatorid if (getCodeByButton (kood, 0) == 2) {// Serial.println ("--- modifikaatorid ----"); if (getCodeByButton (kood, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } else Keyboard.release (altKey); if (getCodeByButton (kood, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } else Keyboard.release (ctrlKey); if (getCodeByButton (kood, 3)> 0) {Keyboard.press (''); } else Keyboard.release (''); if (getCodeByButton (kood, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ shift ------"); } else Keyboard.release (shiftKey); } muud {
// ülesandeid täita
lüliti (kood) {juhtum 30: // --- | Pintsli klaviatuur.press (shiftKey); Keyboard.print ('b'); completePress (kood); murda; juhtum 300: // --- | Eraser Keyboard.press (shiftKey); Keyboard.print ('e'); completePress (kood); murda; juhtum 3000: // --- | Ämbriklaviatuur.press (shiftKey); Keyboard.print ('g'); completePress (kood); murda; juhtum 30000: // --- | Lasso klaviatuur.press (shiftKey); Keyboard.print ('l'); completePress (kood); murda; juhtum 320: //-| o Undo Keyboard.press (ctrlKey); Keyboard.print ('z'); completePress (kood); murda; juhtum 3020: //-| -o Redo klaviatuur.press (ctrlKey); Keyboard.print ('y'); completePress (kood); murda; juhtum 30020: // | --o Ajaloo klaviatuur.press (shiftKey); Keyboard.print ('y'); completePress (kood); murda; juhtum 230: //-o | Salvesta Keyboard.press (ctrlKey); Keyboard.print ('s'); completePress (kood); murda; juhtum 3200: //- | o- Kiire PNG-klaviatuur.press (shiftKey); Keyboard.press (ctrlKey); Keyboard.print ('\' '); completePress (kood); murda; juhtum 22230: // ooo | Fn1 Keyboard.press (Fn1Key); completePress (kood); murda; juhtum 22320: // oo | o Fn2 klaviatuur.press (Fn2Key); completePress (kood); murda; juhtum 23220: // 0 | 00 Fn3 klaviatuur.press (Fn3Key); completePress (kood); murda; juhtum 32220: // | ooo Fn4 Klaviatuur.press (Fn4Key); completePress (kood); murda; }}} int f = 0; // ------------------ PÕHISILM ------------------------ void loop () {
int buttonCode = 0;
for (int i = 0; i <BUTTON_NUM; ++ i) {nupud = buttonStateUpdate (nupud ); buttonCode+= getButtonStateCode (nupud ); }
if (buttonCode! = 0) {
Serial.print ("nupu kood:"); Serial.println (buttonCode); }
doAction (buttonCode);
// pange oma korduvkäivitamiseks siia oma põhikood: // for (int i = nupud [0]; i <sizeof (nupud)/sizeof (nupud [0])+nupud [0]; ++ i) {/ / // if (readButton (i)) {// doAction (i); //} //}
if (getCodeByButton (buttonCode, 0)! = 2)
Keyboard.releaseAll ();
viivitus (DELAY);
}
Loogika kohta pole palju öelda, kuna see sarnaneb minu viimase kontrolleriga, millel on kaks märkimisväärset erinevust:
- Nupud on ehitatud oma olekumasinatega
- Olekud liidetakse kokku, et saada kood, mis määrab toimingu
Põhimõte sarnaneb bittide nihutamisega, kuid kuna nuppudel on mitu olekut ja neid ei saa lihtsalt binaarfailiga esitada, korrutatakse need selle asemel kümne võimsusega. Seejärel liidan kõik nuppude olekud üheks numbriks ja edastan selle lülitile doAction (), kuhu panen kõik otseteede koodid.
Nagu näete, ei kaardistanud ma kõiki võimalikke kombinatsioone. Lisasin vaid mõned oma lemmikklahvid, jätan teie enda teha, et täita ülejäänud, kuidas teile kõige paremini tundub;)
3. samm: kest
Korpuse jaoks kasutasin 3D -printerit. Nagu näete, on kujundusel mõningaid vigu ja ma pidin MacGyverile selle lihtsalt sulgema. Nii et ma ei postita veel mudelifaili.
Nupud on kuumalt liimitud "pinkidele", nii et need hoiavad korgid paigal. Pehmed nupud on selles eriti head, seega hankige kindlasti mõni neist, kui kavatsete teha minu omaga sarnase ümbrise.
Samuti soovitan lisada korpusele veidi kaalu, kuna see on väga kerge. Täiendavad grammid muudavad selle hoidmise loomulikumaks.
Jootke kõik, nagu näidatud, ja ühendage USB -kaabel ning kõik peaks oma kohale mahtuma (mõne liimi abil)!
4. samm: tulemus ja võimalikud parandused
Siin see on! Käsikontroller, mille abil saate ühe käega pääseda juurde kõigile oma olulistele otseteedele!
Selle kasutamiseks on vaja lihasmälu, kuid see on tõesti mitmekülgne!
Loomulikult pole see täiuslik ja praegu mõtlen mõnele võimalusele, kuidas seda parandada. Lisaks korpuse täiustamisele ja otseteede lisamisele arvan, et mul oleks huvitav toetada mitut rakendust erinevate otseteedega. Mõtlen juhtimisskeemide vahel vahetamiseks nupukombinatsioonile, näiteks 4 nupu üheaegsele vajutamisele, et lülituda Photoshopi otseteeki vahel Maya jaoks kohandatud kohandatud teeki vahel.
Lihtsalt mõned ideed.
Täname lugemise eest, järgmise korrani!
Soovitan:
Arduino käeshoitav ventilaator koos mahtuvusliku puutelülitiga: 6 sammu
Arduino pihuarvuti ventilaator mahtuvusliku puutelülitiga. Selles õpetuses õpime, kuidas Hendheldi aku ventilaatorit sisse ja välja lülitada, kasutades mahtuvuslikku puuteandurit, reley moodulit ja Visuino. Vaadake tutvustusvideot
Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu
Kasutage Arduino jaoks kuue nupu jaoks ühte analoogsisendit: olen sageli mõelnud, kuidas saaksin oma Arduino jaoks rohkem digitaalseid sisendeid. Hiljuti tuli mulle pähe, et peaksin saama kasutada ühte analoogsisendit mitme digitaalse sisendi toomiseks. Otsisin kiiresti ja leidsin, kus inimesed asuvad
Pikendatav käeshoitav käepide GoPro/SJ4000/Xiaomi Yi/iLook jaoks: 9 sammu (piltidega)
Pikendatav pihuarvuti GoPro/SJ4000/Xiaomi Yi/iLook jaoks: see õpetus juhendab teid, kuidas häkkida selfie -pulka ja 2D Gimbalit, et teha pikendatav käeshoitav kardaan, millega saab paigaldada selliseid kaameraid nagu GoPro SJ4000/5000/6000 Xiaomi Yi Walkera iLook. Gimbal on stabiliseerimismehhanism, mis parandab
Oranž PI kuidas: Koostage Sunxi tööriist Windowsi jaoks Windowsi jaoks: 14 sammu (piltidega)
Orange PI HowTo: Koostage Sunxi tööriist Windowsi jaoks Windowsi jaoks: EELTINGIMUSED: Teil on vaja Windowsi (lauaarvuti). Interneti -ühendus. Oranž PI -plaat. Viimane on valikuline, kuid olen kindel, et teil on see juba olemas. Vastasel juhul ei loe te seda juhendit. Kui ostate oranži PI patu
Käeshoitav Arduino pongikonsool: 6 sammu (piltidega)
Käeshoitav Arduino pongikonsool: DFRobot võttis minuga hiljuti ühendust, soovides, et kasutaksin nende spetsiaalset Arduino Nano plaati ja OLED -i. Alguses tahtsin luua nutika jalgratta ja ehitasin selle tervikuna. Kuid kahjuks oli Nano massiivse visandi käivitamiseks ja salvestamiseks liiga nõrk