विषयसूची:

रेट्रो नियंत्रक: 7 कदम
रेट्रो नियंत्रक: 7 कदम

वीडियो: रेट्रो नियंत्रक: 7 कदम

वीडियो: रेट्रो नियंत्रक: 7 कदम
वीडियो: I broke my PS5 controller because of my step sis #shorts 2024, सितंबर
Anonim
रेट्रो नियंत्रक
रेट्रो नियंत्रक

मल्टीमीडिया एंड कम्युनिकेटीटेक्नोलोजी (मल्टीक) आन डे इरास्मुशोगेस्कूल ब्रुसेल्स का उपयोग करें।

सामेन हेब्बेन वी ईन मुज़िएक कंट्रोलर गेमाकत डेट मुज़िएक कान स्टार्टन/स्टॉपन, डे पिच कान वर्होगेन, कान तेरुगस्पोलेन एन नोग मीर।

ओन्स आइडिया क्वाम वैन वैन ईन कैसेट, ओन्स डोएल इज ओम ईन कंट्रोलर ते माकन डेट ऑप ईन कैसेट।

चरण 1: वाट हेब जे नोडिग?

वाट हेब जे नोडिग?
वाट हेब जे नोडिग?

घटक

- 2 बटन;

- 2 पोटेंशियो मीटर;

- 2 वीरस्टैंडन (1K एल्क);

- अरुडिनो यूनो/नैनो

- ड्रैडजेस (ज़ी एलेक्ट्रोनिस्क स्कीमा)

- सैनिकप्लाटा

- एमडीएफ प्लेट

उपकरण

- लेसरकटर

- निप्टांग

- स्ट्रिपटांग

- सोल्डरबाउट (मिले हुए टिन)

प्रोग्राम का

- इलस्ट्रेटर/इनडिजाइन (टेकनप्रोग्रामा)

- लावक

- प्रसंस्करण

- अरुडिनो

चरण 2: कोड प्रसंस्करण

कोड प्रसंस्करण
कोड प्रसंस्करण

/**

* Arduino से सीरियल संदेश प्राप्त करने के लिए मूल स्केच * और उन्हें रीपर के लिए OSC- संदेशों में अनुवाद करता है * * आपको USER PARAMETERS को अनुकूलित करने की आवश्यकता होगी * और आपको एक लाइब्रेरी स्थापित करने की आवश्यकता होगी: oscP5 * * वर्ककॉलेज AV & IT के लिए बनाया गया * annoo Bob द्वारा एडी * अक्टूबर 2017 * *//////////////////// उपयोगकर्ता पैरामीटर्स ////////////////// ////////

/ सुनिश्चित करें कि आप अपने Arduino स्केच final int baudRate = 115200 में समान बॉड दर का उपयोग करते हैं;

// जाओ और ओएससी का उपयोग करते समय रीपर में आईपी-पता देखें // यह वह पता है जिसे प्रोसेसिंग भेजता है और रीपर सुनता है। // इस स्ट्रिंग को रिमोटआईपी में यहां रखें।

// अंतिम स्ट्रिंग रिमोटआईपी = "192.168.1.43"; // जैसे। "127.0.0.1";

अंतिम स्ट्रिंग रिमोटआईपी = "रीपर में जिवोन्डेन में वुल हायर आईपी";

// सेंडपोर्ट पर ध्यान दें और इसे रीपर में भरें। // यह वह पोर्ट है जिसे प्रोसेसिंग भेजता है और रीपर सुनता है।

अंतिम इंट सुनोपोर्ट = ११०००, सेंडपोर्ट = १२०००;

// यहां लिनेपोर्ट सक्रिय रूप से डिबग करने के लिए है।

// पोर्टनाम यहां डिबग करने के लिए भी हैं।

अंतिम स्ट्रिंग पोर्टनाम = "अरुडिनो में जिवोन्डेन में वुल हायर डे पोर्टनाम";

// अंतिम स्ट्रिंग पोर्टनाम = "COM6"; // "/ देव/ttyUSB0";

/////////////////// उपयोगकर्ता पैरामीटर का अंत //////////////////////// ////

आयात प्रसंस्करण। धारावाहिक। *; आयात java.util.*;

आयात oscP5.*; आयात netP5.*;

ओएससीपी5 ओएससीपी5; नेटएड्रेस myRemoteLocation;

सीरियल कॉमसपोर्ट; // सीरियल पोर्ट बूलियन मैसेजअराइव्ड = असत्य;

स्ट्रिंग इनकमिंग = "", इनकमिंगOSCMessage = "";

अंतिम चार स्टार्टचार = '*', एंडचार = '#'; अंतिम चार संपर्क चरित्र = '|';

// यह सुनिश्चित करने के लिए कि हम केवल उन मापदंडों (मानों) को भेजते हैं जो बदलते हैं // इन वैश्विक चरों को यहां डिक्लेयर किया गया है, लेकिन // यहां इनिशियलाइज़ नहीं किया जाना चाहिए! हैश मैप पुराने पैराम्स, न्यू पैराम्स, टू सेंड पैराम्स;

// हमें प्रत्येक अल्पविराम शून्य प्रक्रिया पर संदेश को विभाजित करने की आवश्यकता है आने वाली () {स्ट्रिंग resVec = आने वाली। विभाजन ("", "); // हमें नाम + मूल्य जोड़े मिलते हैं // इसलिए प्रत्येक नाम (+2) के लिए … कोशिश करें {के लिए (int i = 0; i < resVec.length; i + = 2) {float value = Float.parseFloat (resVec [i + 1]); // उन्हें नए हैशटेबल में डालें newParams.put(resVec, value); } } // यदि कोई त्रुटि होती है, तो आइए इसे प्रदर्शित करें और बाहर निकलें। पकड़ (अपवाद पूर्व) {println ("अपवाद संदेश:" + पूर्व); प्रिंटअरे (resVec); बाहर जाएं(); } }

// हमारे संदेशों को फ़िल्टर करने के लिए /* हम सुनिश्चित करते हैं कि केवल एक OSC-आउट संदेश है जब * इनपुट संदेश (सीरियल) बदलता है * अर्थात: यदि हम बटन को घुमाते / दबाते हैं और यह मान बदलता है। * इसलिए हम आने वाले मूल्यों को फ़िल्टर करते हैं जो वास्तव में बदलते हैं * नोट: हम कूदने वाले मूल्यों से नहीं बचेंगे * जैसे कि एक्सेलेरोमीटर या दूरी सेंसर से आते हैं * आपको Arduino */ void filterParams () {toSendParams = new में स्वयं को सुचारू करने की आवश्यकता होगी हैश मैप(); के लिए (स्ट्रिंग कुंजी: newParams.keySet ()) {// यदि कुंजी पहले से मौजूद है यदि (oldParams.containsKey (कुंजी)) {// कुंजी मौजूद है और मान समान नहीं है, तो अपडेट करें यदि (!oldParams.get(key).equals(newParams.get(key))) {toSendParams.put(key, newParams.get(key)); } } और {// कुंजी पुराने पैरा में मौजूद नहीं है, इसलिए इसे लगाएं! toSendParams.put (कुंजी, newParams.get (कुंजी)); } oldParams.put(key, newParams.get(key)); } }

शून्य मेकओएससी () {के लिए (स्ट्रिंग कुंजी: toSendParams.keySet ()) {OscMessage myMessage = नया OscMessage ("/" + कुंजी); myMessage.add(toSendParams.get(key)); /* संदेश भेजें */ oscP5.send(myMessage, myRemoteLocation); } }

शून्य अनुवाद संदेश () {प्रक्रिया आने वाली (); फ़िल्टरपरम्स (); मेकओएससी (); } // जब हम विंडो पर प्रिंट करना चाहते हैं शून्य ShowIncoming() {// आने वाले संदेश को देखने के लिए, जैसा कि हैश मैप टेक्स्ट ("Arduino से आने वाली", 20, 20) में सेट किया गया है; इंट वाई = 20; के लिए (स्ट्रिंग कुंजी: newParams.keySet ()) {y = y+20; पाठ (कुंजी, 20, वाई); पाठ (newParams.get (कुंजी), ३००, y); } }

शून्य शोऑस्क () {पाठ (इनकमिंग ओएससीमैसेज, ३००, २००); इनकमिंगओएससीमैसेज = ""; }

शून्य सेटअप () {आकार (1000, 800); // स्टेज साइज फिल (255); पृष्ठभूमि (0); OldParams = नया हैश मैप (); newParams = नया हैश मैप (); // प्रिंटअरे (सीरियल। सूची ()); कॉमसपोर्ट = नया सीरियल (यह, पोर्टनाम, बॉडरेट);

/* oscP5 शुरू करें, आने वाले संदेशों को सुनें */ oscP5 = नया OscP5 (यह, सुनोपोर्ट);

/* myRemoteLocation एक नेटएड्रेस है। एक नेटएड्रेस 2 पैरामीटर लेता है, * एक आईपी पता और एक पोर्ट नंबर। myRemoteLocation को * oscP5.send() में पैरामीटर के रूप में उपयोग किया जाता है जब किसी अन्य कंप्यूटर, डिवाइस, * एप्लिकेशन को osc पैकेट भेजते हैं। उपयोग नीचे देखें। परीक्षण उद्देश्यों के लिए श्रवण बंदरगाह * और दूरस्थ स्थान पते का बंदरगाह समान हैं, इसलिए आप * इस स्केच पर संदेश वापस भेजेंगे। */ myRemoteLocation = नया नेटएड्रेस (रिमोटआईपी, सेंडपोर्ट); }

शून्य ड्रा () {अगर (संदेश आगमन) {पृष्ठभूमि (0); अनुवाद संदेश (); शो इनकमिंग (); संदेश पहुंचे = झूठा; } शोऑस्क (); }

शून्य सीरियलइवेंट (सीरियल कॉमसपोर्ट) {// सीरियल पोर्ट से एक बाइट पढ़ें: चार इनचर = कॉमसपोर्ट। रीडचार (); स्विच (इनचर) {केस कॉन्टैक्ट कैरेक्टर: कॉमसपोर्ट.राइट (संपर्क कैरेक्टर); // अधिक प्रिंट के लिए पूछें ("शुरू हो रहा है …"); टूटना; केस स्टार्टचर: इनकमिंग = ""; टूटना; केस एंडचर: मैसेज अराइव्ड = ट्रू; // println ("संदेश का अंत"); टूटना; डिफ़ॉल्ट: इनकमिंग + = inChar; टूटना; } }

/* आने वाले osc संदेश को oscEvent विधि में अग्रेषित किया जाता है। */ शून्य oscEvent (OscMessage theOscMessage) {फ्लोट मान = theOscMessage.get(0).floatValue (); // पहला ओएससी तर्क प्राप्त करें

IncomingOSCMessage += "\n" + String.format("### एक ओएससी संदेश प्राप्त हुआ:" + "addrpattern:" + theOscMessage.addrPattern() + ": %f", value); println (आने वाली OSCMessage); }

चरण 3: कोड Arduino

कोड Arduino
कोड Arduino

/* यह कोड सीरियल के माध्यम से प्रसंस्करण के साथ संचार करने के लिए एक मूल स्केच है।

यह एक ब्लूप्रिंट है जिसमें आप अपने स्वयं के बटन, पोटेंशियोमीटर या सेंसर के लिए निर्दिष्ट अपना कोड डाल सकते हैं।

यह सुनिश्चित करने के लिए एक हाथ मिलाना है कि हमारे पास संपर्क है और जिस प्रारूप में हम संवाद कर रहे हैं वह तय किया गया है

संदेश को इसी तरह से बनाना महत्वपूर्ण है, ताकि प्रसंस्करण यह जान सके कि इसे कैसे डिकॉन्स्ट्रक्ट करना है और हमारे डीएडब्ल्यू को सही ओएससी-संदेश भेजना है।

वर्ककॉलेज एवी एंड आईटी अक्टूबर 2017 के लिए बनाया गया

डेविड ए मेलिस द्वारा 22 अप्रैल 2007 को कोड स्मूथिंग बनाया गया टॉम इगो द्वारा 9 अप्रैल 2012 को संशोधित किया गया

*/

/ बॉड दर स्थिरांक लंबी बॉडरेट = ११५२००;

// पिन कॉन्स इंट लूप पॉज़टाइम = 200 के चुनावों के बीच एमएस में प्रतीक्षा करने का समय; // मिली सेकंड

// सीरियल कॉन्स स्ट्रिंग स्टार्टस्ट्रिंग = "*", एंडस्ट्रिंग = "#" पर भेजे गए संदेश के लिए प्रारंभ और समाप्ति मान;

कॉन्स्ट चार कॉन्टैक्ट कैरेक्टर = '|';

// पिन आईडी का कॉन्स्ट इंट बटनपिन 1 = 2; कॉन्स्ट इंट बटनपिन२ = ५; कॉन्स्ट इंट numReadings = 5; // दर वैन चौरसाई

इंट पिच रीडिंग = A1; इंट स्पीडरीडिंग = A2; इंट इन्फ्रारीडिंग = ए3;

// अन्य वैश्विक चर int buttonState1 = 0; इंट बटनस्टेट2 = 0; // पुशबटन स्थिति पढ़ने के लिए चर फ्लोट सेंसरValue1 = 0; फ्लोट सेंसरवैल्यू2 = 0; फ्लोट सेंसरवैल्यू3 = 0;

// चौरसाई इंट रीडिंग [संख्या रीडिंग]; // एनालॉग इनपुट से रीडिंग int readIndex3 = 0; // वर्तमान पढ़ने का सूचकांक int Total3 = 0; // चल रहा कुल फ्लोट औसत3 = 0; // औसत

// हमें प्रोसेसिंग स्केच के साथ संपर्क स्थापित करने के लिए इस फ़ंक्शन की आवश्यकता है // इसे यहां रखें शून्य स्थापना संपर्क () { जबकि (सीरियल.उपलब्ध () <= 0) { सीरियल.प्रिंट (संपर्क चरित्र); // एक चार भेजें और प्रतिक्रिया की प्रतीक्षा करें … देरी (लूपपॉज़टाइम); } सीरियल.रीड (); }

शून्य सेटअप () {// सभी पिन पिनमोड के लिए पिनमोड सेट करें (बटनपिन 1, इनपुट); पिनमोड (बटनपिन 2, इनपुट); पिनमोड (पिच रीडिंग, इनपुट); पिनमोड (स्पीडरीडिंग, इनपुट); पिनमोड (इन्फ्रा रीडिंग, INPUT);

// सीरियल कॉम को इनिशियलाइज़ करें Serial.begin(baudRate); जबकि (! सीरियल); // के लिए चौरसाई (int thisReading = 0; thisReading < numReadings; thisReading++) { रीडिंग [thisReading] = 0; }

// हैंडशेक की प्रतीक्षा करें स्थापना संपर्क (); }

शून्य लूप () {// सभी पिनों को पोल करें और रीडिंग को उपयुक्त रेंज बटनस्टेट १ = डिजिटलरेड (बटनपिन १) पर मैप करें; बटनस्टेट 2 = डिजिटल रीड (बटनपिन 2); सेंसरवैल्यू 1 = एनालॉगरेड (पिच रीडिंग); सेंसरवैल्यू 2 = एनालॉगरेड (स्पीडरीडिंग); सेंसरवैल्यू 3 = एनालॉग रीड (इन्फ्रारेडिंग);

// आने वाले मानों को आवश्यक मानों पर मैप करना sensorValue1 = map(sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = नक्शा (सेंसरवैल्यू2, 0, 1023, 0.0, 100)/100.0; सेंसरवैल्यू 3 = नक्शा (सेंसरवैल्यू 3, 0, 700, 50, 100);

// स्मूथिंग सेंसर: Total3 = Total3 - रीडिंग [readIndex3]; // सेंसर से पढ़ें: रीडिंग [readIndex3] = sensorValue3; // रीडिंग को कुल में जोड़ें: Total3 = Total3 + रीडिंग [readIndex3]; // सरणी में अगली स्थिति के लिए अग्रिम: readIndex3 = readIndex3 + 1;

// अगर हम ऐरे के अंत में हैं… अगर (readIndex3>= numReadings) {// … शुरुआत में रैप करें: readIndex3 = 0; } // औसत की गणना करें: औसत3 = (कुल 3 / संख्या रीडिंग); // चौरसाई सेंसर

सीरियल.प्रिंट (स्टार्टस्ट्रिंग); // एक संदेश अनुक्रम शुरू करें // सभी नाम, मूल्य जोड़े, अल्पविराम से अलग करें Serial.print("potentio1"); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट (सेंसरवैल्यू 1); सीरियल.प्रिंट ("", ");

सीरियल.प्रिंट ("पोटेंशियो 2"); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट (सेंसरवैल्यू 2); सीरियल.प्रिंट ("", ");

सीरियल.प्रिंट ("इन्फ्रा-सेंसर"); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट (औसत 3/100); सीरियल.प्रिंट ("", ");

Serial.print ("knop 1 in2 wit"); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट (बटनस्टेट 1); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट ("knop2 in5 गील"); सीरियल.प्रिंट ("", "); सीरियल.प्रिंट (बटनस्टेट 2);

// संदेश का अंत लिखें Serial.print(endString);

// थोड़ी देर के लिए इंतजार करो..

देरी (लूप पॉज़टाइम); }

चरण 4: रीपर

काटनेवाला
काटनेवाला

चरण 1: गा बोवेनं नार विकल्प> प्राथमिकताएं

चरण 2: नियंत्रण में नियंत्रण/ओएससी/वेब में नशे में जोड़ें

चरण 3: कीज़ बिज कंट्रोल सरफेस मोड वूर ओएससी (ओपन साउंड कंट्रोल)

चरण 4: डिवाइस का नाम इन, विंक रिसीव ऑन पोर्ट आन एन वुल इन वाट एर इन प्रोसेसिंग बिज सेंडपोर्ट स्टेट

चरण 5: कोपियर डे होस्ट आईपी डाई जे हायर ज़ीट एन वुल डीज़ इन प्रोसेसिंग

चरण 6: ड्रुक ऑप ओके एन डी कंट्रोलर इज न्यू वर्बोंडेन मेट रीपर

चरण 5: Behuizing

बेहुइज़िंग
बेहुइज़िंग

ब्रीड: 170 मिमी

लंबाई: 90 मिमी

हुगटे 30 मिमी

नॉपेन: 16 मिमी (व्यास.)

पोटेंशियो मीटर: 3 मिमी (व्यास)

अफस्टैंड सेंसर: ब्रीड 2.9 मिमी

लंबाई 0.8 मिमी

सामग्री: एमडीएफ (3 मिमी)

चरण 6: इलेक्ट्रोनिका

चरण 1:

वर्बिंड डे ग्राउंड एन 5 वोल्ट वैन अरुडिनो हेट ब्रेडबोर्ड से मिला

चरण 2:

Verbind pin A0 मेट पोटेंशियो 1

Verbind pin A1 मेटेंशियो 2. से मिला

Verbind pin A3 इन्फ्रारेड सेंसर से मिला।

Verbind pin A2 मेट डे नीट स्टिकी बटन।

वर्बाइंड पिन ए5 मेट डे स्टिकी बटन।

चरण 7: मेडवर्कर्स

मेडवर्कर्स
मेडवर्कर्स

- मायेस एल बाबा

- अर्नो गोरिसन

- मिचेल डी वांडेलेर

सिफारिश की: