Πίνακας περιεχομένων:

Retro Controller: 7 Βήματα
Retro Controller: 7 Βήματα

Βίντεο: Retro Controller: 7 Βήματα

Βίντεο: Retro Controller: 7 Βήματα
Βίντεο: PUBG Gamepad με Ενσωματωμένο Powerbank & Aνεμιστήρα +ΔΙΑΓΩΝΙΣΜΟΣ 2024, Νοέμβριος
Anonim
Ρετρό ελεγκτής
Ρετρό ελεγκτής

Wij zijn eerste jaar studenten uit de opleiding Multimedia & Communicatietechnologie (Multec) aan de Erasmushogeschool Brussel.

Samen hebben we een muziek controller gemaakt dat muziek kan starten/stoppen, de pitch kan verhogen, kan terugspoelen en nog meer.

Κατά την ιδέα της κασέτας, το ons doel ήταν ο καθένας από τον ελεγκτή που έκανε τη λειτουργία της κασέτας.

Βήμα 1: Wat Heb Je Nodig;

Wat Heb Je Nodig
Wat Heb Je Nodig

Componenten

- 2 κουμπιά.

- 2 μετρητές Potentio.

- 2 weerstanden (1K elk).

- Arduino uno/nano

- Draadjes (zie elektronisch σχήμα)

- Soldeerplaat

Πλάκα MDF

Εργαλεία

- Lasercutter

- Κνίπτανγκ

- Στριπτάνγκ

Soldeerbout (met tin)

Του προγράμματος

- Εικονογράφος/indesign (Tekenprogramma)

- θεριστής

- Επεξεργασία

- Arduino

Βήμα 2: Επεξεργασία κώδικα

Επεξεργασία κώδικα
Επεξεργασία κώδικα

/**

* Βασικό σκίτσο για τη λήψη σειριακών μηνυμάτων από το Arduino * και τα μεταφράζει σε μηνύματα OSC για Reaper * * Θα χρειαστεί να προσαρμόσετε τους ΠΑΡΑΜΕΤΡΟΥΣ ΧΡΗΣΤΗ * και θα χρειαστεί να εγκαταστήσετε μια Βιβλιοθήκη: oscP5 * * made for werkcollege AV&IT * by annoo bob eddi * οκτ 2017 * *///////////////////// ΠΑΡΑΜΕΤΡΟΙ ΧΡΗΣΤΗ //////////////////// /////////

/ βεβαιωθείτε ότι χρησιμοποιείτε τον ίδιο ρυθμό baud στο σκίτσο Arduino final int baudRate = 115200;

// Πηγαίνετε και αναζητήστε τη διεύθυνση IP στο Reaper όταν χρησιμοποιείτε OSC // Αυτή είναι η διεύθυνση στην οποία στέλνει η επεξεργασία και την οποία ακούει ο Reaper. // Βάλτε αυτήν τη συμβολοσειρά στο remoteIP, εδώ.

// τελικό String remoteIP = "192.168.1.43"; //π.χ. "127.0.0.1";

τελικό String remoteIP = "vul hier ip in gevonden in reaper";

// Σημειώστε το sendPort και συμπληρώστε το στο Reaper. // Αυτή είναι η θύρα που στέλνει η επεξεργασία και ακούει η Reaper.

τελικό int listenPort = 11000, sendPort = 12000;

// Το listenPort εδώ είναι ο ενεργός εντοπισμός σφαλμάτων.

// τα portNames είναι επίσης εδώ για να διορθώσετε σφάλματα.

τελικό String portName = "vul hier de portname in gevonden στο Arduino";

// τελικό String portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// ΤΕΛΟΣ ΠΑΡΑΜΕΤΡΩΝ ΧΡΗΣΤΗ //////////////////////// ////

επεξεργασία εισαγωγής.σειρά.*; εισαγωγή java.util.*;

εισαγωγή oscP5.*; εισαγωγή netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Serial commsPort; // Η σειριακή θύρα boolean messageArrived = false;

String incoming = "", IncomingOSCMessage = "";

τελικό char startChar = '*', endChar = '#'; τελικό char contactCharacter = '|';

// Για να βεβαιωθείτε ότι στέλνουμε μόνο τις παραμέτρους (τιμές) που αλλάζουν // αυτές οι γενικές μεταβλητές εμφανίζονται εδώ αλλά δεν πρέπει // να αρχικοποιηθούν εδώ! HashMap oldParams, newParams, toSendParams;

// Πρέπει να χωρίσουμε το μήνυμα σε κάθε κόμμα void processIncoming () {String resVec = incoming.split (","); // παίρνουμε ζεύγη ονόματος+τιμών // έτσι για κάθε όνομα (+2)… δοκιμάστε {για (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // βάλτε τα στο νέο Hashtable newParams.put (resVec , value); }} // εάν παρουσιαστεί σφάλμα, ας το πιάσουμε να εμφανίζεται και να βγαίνουμε. catch (Exception ex) {println ("Exception Message:" + ex); printArray (resVec); έξοδος(); }}

// Για να φιλτράρουμε τα μηνύματά μας/ * Βεβαιωνόμαστε ότι υπάρχει μόνο ένα μήνυμα OSC-out όταν * το μήνυμα εισόδου (Serial) αλλάζει * Δηλαδή: αν γυρίσουμε/πατήσουμε το κουμπί και αλλάξει τιμή. * Έτσι φιλτράρουμε τις εισερχόμενες τιμές που πραγματικά αλλάζουν * σημείωση: δεν θα αποφύγουμε τις τιμές άλματος * όπως προέρχονται π.χ. από επιταχυνσιόμετρα ή αισθητήρες απόστασης * θα πρέπει να τις εξομαλύνετε μόνοι σας στο Arduino */ void filterParams () {toSendParams = new HashMap (); για (Κλειδί συμβολοσειράς: newParams.keySet ()) {// αν το κλειδί είναι ήδη αν). Equals (newParams.get (κλειδί))) {toSendParams.put (κλειδί, newParams.get (κλειδί)); }} else {// κλειδί δεν υπάρχει στα παλιά στοιχεία, οπότε θέστε το! toSendParams.put (κλειδί, newParams.get (κλειδί)); } oldParams.put (κλειδί, newParams.get (κλειδί)); }}

void makeOSC () {for (Κλειδί συμβολοσειράς: toSendParams.keySet ()) {OscMessage myMessage = νέο OscMessage ("/"+ κλειδί); myMessage.add (toSendParams.get (κλειδί)); / * στείλτε το μήνυμα */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Όταν θέλουμε να εκτυπώσουμε στο παράθυρο void ShowIncoming () {// για να δούμε το εισερχόμενο μήνυμα, όπως έχει οριστεί στο κείμενο του HashMap ("Εισερχόμενα από Arduino", 20, 20); int y = 20; για (Κλειδί συμβολοσειράς: newParams.keySet ()) {y = y+20; κείμενο (κλειδί, 20, y). κείμενο (newParams.get (κλειδί), 300, y); }}

void showOsc () {text (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

void setup () {μέγεθος (1000, 800); // Συμπλήρωση μεγέθους σκηνής (255). φόντο (0); oldParams = νέο HashMap (); newParams = νέο HashMap (); // printArray (Serial.list ()); commsPort = νέο Σειριακό (αυτό, portName, baudRate);

/ * εκκίνηση oscP5, ακρόαση εισερχόμενων μηνυμάτων */ oscP5 = νέο OscP5 (αυτό, listenPort);

/* myRemoteLocation είναι μια NetAddress. ένα NetAddress λαμβάνει 2 παραμέτρους, * μια διεύθυνση IP και έναν αριθμό θύρας. Το myRemoteLocation χρησιμοποιείται ως παράμετρος στο * oscP5.send () κατά την αποστολή πακέτων osc σε άλλο υπολογιστή, συσκευή, * εφαρμογή. χρήση δείτε παρακάτω. για σκοπούς δοκιμής, η θύρα ακρόασης * και η θύρα της απομακρυσμένης διεύθυνσης τοποθεσίας είναι οι ίδιες, επομένως * θα στείλετε μηνύματα πίσω σε αυτό το σκίτσο. */ myRemoteLocation = νέα NetAddress (remoteIP, sendPort); }

void draw () {if (messageArrived) {background (0); translateMessage (); ShowIncoming (); messageArrived = false; } showOsc (); }

void serialEvent (Serial commsPort) {// διαβάστε ένα byte από τη σειριακή θύρα: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // ζητήστε περισσότερα println ("εκκίνηση …"); Διακοπή; θήκη startChar: εισερχόμενη = ""; Διακοπή; υπόθεση endChar: messageArrived = true; // println ("τέλος μηνύματος"); Διακοπή; προεπιλογή: εισερχόμενη += inChar; Διακοπή; }}

/* τα εισερχόμενα μηνύματα osc προωθούνται στη μέθοδο oscEvent. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // λάβετε το 1ο όρισμα osc

IncomingOSCMessage + = "\ n" + String.format ("### έλαβε ένα μήνυμα osc:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", value); println (IncomingOSCMessage); }

Βήμα 3: Κωδικός Arduino

Κωδικός Arduino
Κωδικός Arduino

/* Αυτός ο κώδικας είναι ένα βασικό σκίτσο για την επικοινωνία με την Επεξεργασία μέσω σειριακού.

Είναι ένα σχέδιο στο οποίο μπορείτε να βάλετε τον δικό σας κωδικό που καθορίζεται για τα δικά σας κουμπιά, ποτενσιόμετρα ή αισθητήρες.

Έχει χειραψία για να βεβαιωθείτε ότι έχουμε επαφή και αποφασίζεται η μορφή με την οποία επικοινωνούμε

Είναι σημαντικό να κατασκευάσετε το μήνυμα με τον ίδιο τρόπο, έτσι ώστε η Επεξεργασία να γνωρίζει πώς να το αποδομήσει και να στείλει σωστά μηνύματα OSC στο DAW μας

φτιαγμένο για werkcollege AV&IT oct 2017

κωδικός smooothing δημιουργήθηκε 22 Απρ 2007 από τον David A. Mellis τροποποιήθηκε στις 9 Απριλίου 2012 από τον Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// χρόνος αναμονής σε ms μεταξύ δημοσκοπήσεων προς τις ακίδες const int loopPauseTime = 200; // χιλιοστά του δευτερολέπτου

// τιμές έναρξης και λήξης για το μήνυμα που αποστέλλεται στο Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // ισοτιμία λείανσης βαν

int pitchReading = A1; int speedReading = A2; int infraReading = A3;

// άλλες καθολικές μεταβλητές int buttonState1 = 0; int buttonState2 = 0; // μεταβλητή για την ανάγνωση του αισθητήρα επιπλεύσης κατάστασης του κουμπιού πίεσηςValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// εξομάλυνση int αναγνώσεων [numReadings]; // οι ενδείξεις από την αναλογική είσοδο int readIndex3 = 0; // ο δείκτης της τρέχουσας ανάγνωσης int total3 = 0; // ο συνολικός μέσος όρος float3 = 0; // ο μέσος όρος

// Χρειαζόμαστε αυτήν τη συνάρτηση για να δημιουργήσουμε επαφή με το σκίτσο επεξεργασίας // Διατηρήστε το εδώ άκυρο estabContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // στείλτε μια κάρτα και περιμένετε μια απάντηση… καθυστέρηση (loopPauseTime); } Serial.read (); }

void setup () {// set the pinModes for all the pin pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// αρχικοποίηση Serial comms Serial.begin (baudRate); ενώ (! Σειριακό)? // smoothing για (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// περιμένετε για χειραψία estabContact (); }

void loop () {// δημοσκοπήστε όλες τις καρφίτσες και χαρτογραφήστε την ανάγνωση στο κατάλληλο εύρος κουμπιούState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// αντιστοίχιση των εισερχόμενων τιμών στις απαραίτητες τιμές sensorValue1 = χάρτης (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = χάρτης (sensorValue2, 0, 1023, 0.0, 100)/100.0; sensorValue3 = χάρτης (sensorValue3, 0, 700, 50, 100);

// αισθητήρας εξομάλυνσης: total3 = total3 - μετρήσεις [readIndex3]; // ανάγνωση από τον αισθητήρα: αναγνώσεις [readIndex3] = sensorValue3; // προσθέστε την ένδειξη στο σύνολο: total3 = total3 + αναγνώσεις [readIndex3]; // προχωρήστε στην επόμενη θέση στον πίνακα: readIndex3 = readIndex3 + 1;

// αν βρισκόμαστε στο τέλος του πίνακα… if (readIndex3> = numReadings) {//… τυλίξτε στην αρχή: readIndex3 = 0; } // υπολογίστε το μέσο όρο: average3 = (total3 / numReadings); // αισθητήρας εξομάλυνσης

Serial.print (startString); // εκκίνηση μιας ακολουθίας μηνυμάτων // wirte όλα τα ονόματα, ζεύγη τιμών, χωρισμένα με κόμματα Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

Serial.print ("potentio2"); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");

Serial.print ("υπέρ-αισθητήρας"); Serial.print (","); Serial.print (μέσος όρος3/100); Serial.print (",");

Serial.print ("knop 1 in2 wit"); Serial.print (","); Serial.print (buttonState1); Serial.print (","); Serial.print ("knop2 in5 geel"); Serial.print (","); Serial.print (buttonState2);

// γράψτε το τέλος του μηνύματος Serial.print (endString);

// περίμενε για λίγο..

καθυστέρηση (loopPauseTime); }

Βήμα 4: Θεριστής

Θεριστής
Θεριστής

Βήμα 1: Επιλέξτε τις επιλογές> Προτιμήσεις

Βήμα 2: Ga στις προτιμήσεις naar Control/OSC/web και druk op Add

Βήμα 3: Kies bij Control surface mode voor OSC (Open Sound Control)

Βήμα 4: Όνομα συσκευής Vul je, vink Recieve on port aan en vul in wat er στην επεξεργασία bij Sendport staat

Βήμα 5: Kopieer de Host IP μπορεί να χρησιμοποιηθεί για επεξεργασία

Βήμα 6: Το χειριστήριο είναι εντάξει και ο ελεγκτής δεν γνωρίζει τον Reaper

Βήμα 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Μήκος: 90 mm

Αγκράφα 30 mm

Knoppen: 16 mm (διάμετρος

Μετρητές Potentio: 3 mm (διάμετρος)

Αισθητήρας Afstand: Breedte 2,9 mm

Μήκος 0,8 mm

Υλικό: MDF (3mm)

Βήμα 6: Elektronica

Βήμα 1:

Verbind de ground en 5 volt van Arduino met het breadboard

Βήμα 2:

Verbind pin A0 met potentio 1

Verbind pin A1 met potentio 2

Verbind pin A3 met infrarood sensor.

Verbind pin A2 met de niet κολλώδες κουμπί.

Verbind pin A5 met de sticky button.

Βήμα 7: Medewerkers

Medewerkers
Medewerkers

- Mayes El Baba

- Άρνο Γκόρισεν

- Michiel De Wandelaer

Συνιστάται: