Orodha ya maudhui:

Kidhibiti cha Mkato cha Mkononi (kwa Photoshop + Zaidi) [Arduino]: Hatua 4
Kidhibiti cha Mkato cha Mkononi (kwa Photoshop + Zaidi) [Arduino]: Hatua 4

Video: Kidhibiti cha Mkato cha Mkononi (kwa Photoshop + Zaidi) [Arduino]: Hatua 4

Video: Kidhibiti cha Mkato cha Mkononi (kwa Photoshop + Zaidi) [Arduino]: Hatua 4
Video: Darassa ft Ben Pol - Muziki ( Official Music Video ) 2024, Julai
Anonim
Kidhibiti cha Mkato cha Mkononi (kwa Photoshop + Zaidi) [Arduino]
Kidhibiti cha Mkato cha Mkononi (kwa Photoshop + Zaidi) [Arduino]

Wakati wa mwisho niliunda pedi ndogo ya kudhibiti kutumia kwenye Photoshop. Ilifanya maajabu, na bado ninaitumia! Lakini pia ni mdogo, na vifungo vitano tu na saizi muhimu na piga opacity. Bado nilijikuta nikifikia kibodi sana…

Kwa hivyo nilianza kufanya kazi kwenye upitishaji unaofuata wa pedi ya kudhibiti, moja ikiwa na vifungo zaidi na utendaji. Kidhibiti kimoja cha kuwatawala wote.

Hii sio pedi hiyo ya kudhibiti. Lakini kwa njia inaweza kuwa bora.

Je! Ikiwa ungekuwa na njia ya mkato ya tani, lakini kwa kifurushi kizuri na kizito unaweza kushikilia kwa mkono wako wa bure wakati unachora bila kukatizwa? … Sawa, ya kutosha na infomercial.

Kidhibiti hiki kimepangwa kwa njia ambayo, ikiwa na vifungo 4 tu, inaweza kupangiliwa hadi njia za mkato 32 zinazowezekana! Kitufe cha nyongeza cha 5 kipo ili kuniruhusu nitumie funguo za kurekebisha katika mchanganyiko wowote, ambayo ni muhimu kwa programu nyingi (je! Uliwahi kujaribu mchanganyiko wa Alt-RMB katika PS? Ikiwa haujafanya hivyo, tafadhali fanya. Ni kuokoa maisha). Ninaelezea mfumo baadaye.

Ili kufanya yote haya utahitaji:

  • 1 Microcontroller (nilitumia Adafruit ItsyBitsy 32u4 lakini yeyote anapaswa kufanya ilimradi ina chip ya atmega32u4)
  • 1 adapta ndogo ya USB (data, sio nguvu tu)
  • Vifungo 5 vya kushinikiza (nilitumia laini, kama hizi)
  • Vipinzani vya 10k Ohm (1 kwa kila kitufe)
  • Waya, ubao wa mkate, vifaa vya solder, nk.
  • Kitu cha kutengeneza casing na (printa ya 3D, n.k.)

Huu ni mradi wa kiwango cha kati wa Arduino, na ninashauri kutazama mafunzo yangu ya zamani ili kuelewa vizuri kinachoendelea, kwani hii ni kurudia kwa mambo niliyoelezea hapo.

Ok, wacha tuanze!

Hatua ya 1: Kupanga

Kupanga
Kupanga

Huu ni mpango wa kimsingi niliouvuta wa mtawala. Mzunguko ni rahisi sana ukilinganisha na mradi wangu uliopita! Lakini tutaweza kufanya mengi zaidi na vifungo vichache ilivyonavyo, kwa nguvu ya mitambo ya pamoja!

Wazo nyuma ya mpango wa kudhibiti ni kwamba kila kitufe kinaweza kuwa bure, kushinikizwa na kutolewa, au kushinikizwa na kushikiliwa. Kubonyeza na kutoa ndio itakayowezesha njia ya mkato, wakati kushikilia vifungo kutatupa ufikiaji wa njia za mkato tofauti. Kwa hivyo ukibonyeza kitufe A tu, utaamilisha njia ya mkato A, lakini ikiwa unashikilia B wakati wa kubonyeza A, utapata njia ya mkato tofauti. Unaweza kushikilia hadi vifungo 3 mara moja wakati wa kubonyeza, kwa hivyo wakati utatumia mchanganyiko wa kimsingi, utaona ni mchanganyiko wangapi unaowezekana na mfumo huu!

Kitufe cha ziada cha tano kilisikia kama nyongeza ya asili, ikipewa umbo la mkono niliokuja nao. Niliamua kuitumia kupata funguo za kurekebisha katika picha. Njia inavyofanya kazi ni tofauti kidogo na vifungo vingine: wakati wowote kitufe cha kidole gumba kinaposhikiliwa, vigeuzi tu vitatumika. Hizi zitawasha wakati zinashikiliwa na nyingi zinaweza kushinikizwa. Kwa hivyo ikiwa kitufe A ni Shift, na kifungo B ni Ctrl, wakati unashikilia A na B itakuwa kama kubonyeza Shift na Ctrl, lakini kwa muda mrefu kama kifungo cha kidole kimeshikiliwa!

Ganda imeundwa kuwa ergonomic na ambidextrous. Nilijali sana kuifanya iwe sawa snogly ili kutumia kidole kidogo kisichoshe sana, na inapaswa kufanya kazi kwa wale walio na mikono mikubwa kuliko yangu pia.

Hatua ya 2: Mfano wa Nambari

Mfano + Msimbo
Mfano + Msimbo

Ni mazoezi mazuri kujaribu vifungo kwenye ubao wa mkate. Ni rahisi sana, unganisha tu vifungo na vipinga kama inavyoonyeshwa. Unaweza kuijaribu na nambari hapa (mbadala ya kiungo cha pastebin):

# pamoja

// tumia chaguo la vthisv kwa MacOS:

// char ctrlKey = KEY_LEFT_GUI;

// tumia chaguo la vthisv kwa Windows na Linux:

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

// Funguo za Kazi hapa

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

pini za ujazo = {9, 10, 11, 12, 13}; // safu ya pini zote za kifungo

// Usikivu

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;

// Fungia muafaka

ucheleweshaji wa int = 0;

enum States {huru, imeshinikizwa, imeshikiliwa, imetolewa};

kitufe cha muundo {

pini; Nchi zinasema; wakati uliofanyika }; // kidole gumba, faharisi, katikati, pete, kidogo;

vifungo vya kifungo [BUTTON_NUM] = {};

kitufe cha initButton (int p) {

kifungo b; pinMode (p, INPUT); b.pin = p; b.state = States:: huru; b.timeHeld = 0; kurudi b; }

usanidi batili () {

// weka nambari yako ya usanidi hapa, kukimbia mara moja: Serial.begin (9600); Kinanda.anza ();

wakati (! Serial) {};

// Vifungo vya (int i = 0; i <(BUTTON_NUM); ++ i) {Serial.print ("seti ya kifungo"); Printa ya serial (i); Serial.print ("kwenye pini:"); Serial.println (pini ); // vifungo .pini = 1; vifungo = initButton (pini ); Serial.println (vifungo .pin); }

}

kusoma boolButton (int pin) {

// angalia na utengue vifungo ikiwa (digitalRead (pin) == HIGH) {kuchelewa (10); ikiwa (digitalRead (pin) == HIGH) {kurudi kweli; }} kurudi uwongo; }

int pintobin (int pin) {

ikiwa (pini == pini [0]) kurudi 1; ikiwa (pini == pini [1]) kurudi 10; ikiwa (pini == pini [2]) kurudi 100; ikiwa (pini == pini [3]) kurudi 1000; ikiwa (pini == pini [4]) rudisha 10000; kitufe} kitufe cha kusasisha hali (kifungo b)

vyombo vya habari vya bool = readButton (b.pin);

badilisha (b.state) {case States:: freed: b.timeHeld = 0; ikiwa (bonyeza) b.state = States:: taabu; kuvunja; kesi imesisitizwa: b.timeHeld + = 1; ikiwa (bonyeza) {if (b.timeHeld> (THRESH_1 / (1 + DELAY))) {b.state = States:: held; }} mwingine {// if (b.timeHeld

int getButtonStateCode (kifungo b)

{kurudi b.state * pintobin (b.pin); }

intCodeByButton (nambari ya ndani, faharisi ya int) {

int r1, r2, r3, r4, r5; int opStep = BUTTON_NUM - (faharisi 1 +);

// operesheni ya kwanza

ikiwa (opStep == 0) nambari ya kurudi / 10000; r1 = nambari% 10000;

ikiwa (opStep == 1)

kurudi r1 / 1000; r2 = r1% 1000; ikiwa (opStep == 2) r2/100; r3 = r2% 100; ikiwa (opStep == 3) kurudi r3 / 10; r4 = r3% 10; ikiwa (opStep == 4) kurudi r4 / 1; r5 = r4% 1; }

kamili batili (int pin) {

// Serial.print ("pembejeo"); // Serial.println (pini); kuchelewesha (THRESH_3); Kinanda.releaseAll (); }

batili doAction (nambari ya ndani) {

// Modifiers ikiwa (getCodeByButton (code, 0) == 2) {// Serial.println ("--- modifiers ----"); ikiwa (getCodeByButton (nambari, 1)> 0) {Keyboard.press (altKey); // Serial.println ("------- alt ---------"); } Kinanda nyingine.tufadhali (altKey); ikiwa (getCodeByButton (nambari, 2)> 0) {Keyboard.press (ctrlKey); // Serial.println ("-------- ctrl ----------"); } Kinanda nyingine.release (ctrlKey); ikiwa (getCodeByButton (nambari, 3)> 0) {Keyboard.press ("); } Kinanda nyingine. tafadhali ("); ikiwa (getCodeByButton (nambari, 4)> 0) {Keyboard.press (shiftKey); // Serial.println ("------ kuhama ------"); } Kinanda nyingine.tufadhali (shiftKey); } mwingine {

// fanya kazi

kubadili (nambari) {kesi 30: // --- | Kinanda cha brashi.press (shiftKey); Kinanda.print ('b'); waandishi kamili (nambari); kuvunja; kesi 300: // --- | Kinanda cha Eraser.press (shiftKey); Kinanda.print ('e'); waandishi kamili (nambari); kuvunja; kesi 3000: // --- | Kinanda cha Ndoo.press (shiftKey); Kinanda.print ('g'); waandishi kamili (nambari); kuvunja; kesi 30000: // --- | Kinanda ya Lasso.press (shiftKey); Kinanda.print ('l'); waandishi kamili (nambari); kuvunja; kesi 320: // - | o Tendua Keyboard.press (ctrlKey); Kinanda.print ('z'); waandishi kamili (nambari); kuvunja; kesi 3020: // - | -o Rudisha Kinanda.press (ctrlKey); Kinanda.print ('y'); waandishi kamili (nambari); kuvunja; kesi 30020: // | --o Historia Kinanda.press (shiftKey); Kinanda.print ('y'); waandishi kamili (nambari); kuvunja; kesi 230: // - o | Hifadhi Keyboard.press (ctrlKey); Kinanda.print ('s'); waandishi kamili (nambari); kuvunja; kesi 3200: // - | o- Kibodi ya haraka ya PNG.press (shiftKey); Kinanda.press (ctrlKey); Kinanda.print ('\' '); waandishi kamili (nambari); kuvunja; kesi 22230: // ooo | Fn1 Kinanda.press (Fn1Key); waandishi kamili (nambari); kuvunja; kesi 22320: // oo | o Fn2 Keyboard.press (Fn2Key); waandishi kamili (nambari); kuvunja; kesi 23220: // 0 | 00 Fn3 Kinanda.press (Fn3Key); waandishi kamili (nambari); kuvunja; kesi 32220: // | ooo Fn4 Keyboard.press (Fn4Key); waandishi kamili (nambari); kuvunja; }}} int f = 0; // ------------------ MTANDAO KUU -------------- {)

kifungo cha ndani Code = 0;

kwa (int i = 0; i <BUTTON_NUM; ++ i) {vifungo = buttonStateUpdate (vifungo ); kifungoCode + = getButtonStateCode (vifungo ); }

ikiwa (Nambari ya kifungo! = 0) {

Serial.print ("msimbo wa kifungo:"); Serial.println (kifungo cha kificho); }

doAction (kifungo cha kificho);

// weka nambari yako kuu hapa, kukimbia mara kwa mara: // for (int i = vifungo [0]; i <sizeof (vifungo) / sizeof (vifungo [0]) + vifungo [0]; ++ i) {/ / // ikiwa (somaButton (i)) {// doAction (i); //} //}

ikiwa (getCodeByButton (buttonCode, 0)! = 2)

Kinanda.releaseAll ();

kuchelewesha (kuchelewesha);

}

Hakuna mengi ya kusema juu ya mantiki kwani ni sawa na ile ya mtawala wangu wa mwisho, na tofauti mbili mashuhuri:

  1. Vifungo vimechakaa na mashine zao za serikali
  2. Mataifa yanajumuishwa pamoja ili kuunda nambari ambayo huamua hatua

Kanuni hiyo ni sawa na kuhama kidogo, lakini kwa sababu vifungo vina majimbo mengi na haziwezi tu kuwakilishwa na binary, huzidishwa na nguvu za kumi badala yake. Kisha ninaongeza vifungo vyote kuwa nambari moja, na kuipitisha kwenye taarifa ya kubadili (), ambapo niliweka nambari zote za mkato.

Kama unavyoona, sikuweka ramani kila mchanganyiko unaowezekana. Nimeongeza tu njia chache za mkato ninazozipenda, naachia wewe kujaza zingine jinsi unavyoona inafaa;)

Hatua ya 3: Kesi

Kesi
Kesi
Kesi
Kesi
Kesi
Kesi

Nilitumia printa ya 3D kwa casing. Kama unavyoona, muundo una kasoro kadhaa na ilibidi MacGyver njia ya kuifunga tu. Kwa hivyo sitakuwa nikituma faili ya mfano bado.

Vifungo vimechomwa moto kwenye "madawati" ili waweze kuweka kofia mahali. Pushbuttons laini ni nzuri sana kwa hiyo, kwa hivyo hakikisha kupata zingine ikiwa unapanga kutengeneza kesi sawa na yangu.

Pia, ninashauri kuongeza uzito kidogo ndani ya kesi hiyo, kwani ni nyepesi sana. Gramu za ziada zitaifanya kuishikilia kuwa ya asili zaidi.

Solder kila kitu kama inavyoonyeshwa na unganisha kebo ya usb, na kila kitu kinapaswa kutoshea (kwa msaada wa gundi)!

Hatua ya 4: Matokeo na Maboresho Yanayowezekana

Matokeo na Maboresho Yanayowezekana
Matokeo na Maboresho Yanayowezekana
Matokeo na Maboresho Yanayowezekana
Matokeo na Maboresho Yanayowezekana
Matokeo na Maboresho Yanayowezekana
Matokeo na Maboresho Yanayowezekana

Hapo unayo! Kidhibiti cha mkono ambacho unaweza kutumia kupata njia zako za mkato muhimu kwa mkono mmoja tu!

Inachukua kumbukumbu ya misuli kutumia, lakini ni sawa!

Kwa kweli sio kamili, na sasa hivi ninafikiria juu ya njia kadhaa za kuiboresha. Kando na kuboresha kitako na kuongeza njia za mkato, nadhani ningefurahi kuunga mkono matumizi anuwai na njia za mkato tofauti. Ninafikiria kuwa na mchanganyiko wa kitufe kubadili kati ya mipango ya kudhibiti, kama kubonyeza vifungo 4 kwa wakati mmoja kubadili kati ya maktaba ya mkato ya Photoshop hadi kwa mkanda mmoja uliotengenezwa kwa Maya.

Mawazo tu.

Asante kwa kusoma, hadi wakati mwingine!

Ilipendekeza: