Turinys:

Retro valdiklis: 7 žingsniai
Retro valdiklis: 7 žingsniai

Video: Retro valdiklis: 7 žingsniai

Video: Retro valdiklis: 7 žingsniai
Video: 7 klaidos montuojant cilindrą ant motorolerio 2024, Lapkritis
Anonim
Retro valdiklis
Retro valdiklis

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

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

Yra ideali kwam van van een kasetė, „ons doel“buvo valdiklis, su kuriuo buvo galima rasti kasetę.

1 žingsnis: Wat Heb Je Nodig?

Kas yra heb Je Nodig?
Kas yra heb Je Nodig?

Komponentas

- 2 mygtukai;

- 2 potenciometrai;

- 2 supratimai (1 tūkst. Briedžių);

- „Arduino uno/nano“

- Draadjes (zie elektronisch schema)

- Soldeerplaat

- MDF plokštė

Įrankiai

- Lazerinis pjoviklis

- Kniptang

- Striptang

- Soldeerbout (metalo alavas)

Programos

- iliustratorius/dizaineris („Tekenprogramma“)

- Javapjovė

- Apdorojimas

- Arduino

2 žingsnis: kodo apdorojimas

Kodo apdorojimas
Kodo apdorojimas

/**

* Pagrindinis eskizas, skirtas gauti serijinius pranešimus iš „Arduino“* ir išversti juos į „OSC“pranešimus „Reaper“eddi * spalis 2017 * *///////////////////// VARTOTOJO PARAMETRAI ////////////////// ////////

/ įsitikinkite, kad naudojate tą patį duomenų perdavimo spartą „Arduino“eskizo galutiniame int baudRate = 115200;

// Eikite ir ieškokite IP adreso „Reaper“, kai naudojate OSC // Tai adresas, į kurį siunčia „Processing“ir klauso „Reaper“. // Įdėkite šią eilutę į „remoteIP“, čia.

// final String remoteIP = "192.168.1.43"; // pvz. „127.0.0.1“;

final String remoteIP = "vul hier ip in gevonden in pjūtis";

// Atkreipkite dėmesį į „sendPort“ir užpildykite tai „Reaper“. // Tai yra prievadas, į kurį siunčia apdorojimas ir kurio klauso „Reaper“.

final int listenPort = 11000, sendPort = 12000;

// „ListenPort“čia yra aktyviai derinti.

// „PortNames“taip pat yra derinti.

final String portName = "vul hier de portname in gevonden in Arduino";

// final String portName = "COM6"; // "/dev/ttyUSB0";

////////////////////// VARTOTOJO PARAMETRŲ PABAIGA //////////////////////// ////

importo apdorojimas.serijinis.*; importuoti java.util.*;

importuoti oscP5.*; importuoti netP5.*;

OscP5 oscP5; „NetAddress myRemoteLocation“;

Serial commsPort; // Serijinio prievado loginis pranešimasArrived = false;

Eilutės gaunamos = "", IncomingOSCMessage = "";

final char startChar = '*', endChar = '#'; galutinis char contactCharacter = '|';

// Kad įsitikintumėte, jog siunčiame tik tuos parametrus (reikšmes), kurie keičiasi // šie visuotiniai kintamieji yra atmetami čia, bet // jų negalima inicijuoti čia! HashMap oldParams, newParams, toSendParams;

// Mums reikia padalyti pranešimą kiekviename kablelio negaliojimo proceseIncoming () {String resVec = gaunamas.split (","); // mes gauname vardo+reikšmių poras // taigi kiekvienam vardui (+2)… pabandykite {dėl (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // įdėti juos į naują hashtable newParams.put (resVec , vertė); }} // jei įvyksta klaida, sugaukime jos rodymą ir išeisime. catch (Exception ex) {println ("Išimties pranešimas:" + ex); printArray (resVec); išeiti (); }}

// Norėdami filtruoti mūsų pranešimus/ * Mes įsitikiname, kad OSC išvesties pranešimas yra tik tada, kai * pasikeičia įvesties pranešimas (serijinis) * Tai yra: jei pasuksime/paspausime mygtuką ir jis pakeis vertę. * Taigi mes išfiltruojame gaunamas vertes, kurios iš tikrųjų keičiasi „HashMap“(); for (String key: newParams.keySet ()) {// jei raktas jau yra, jei (oldParams.containsKey (key)) {// raktas yra ir reikšmė nėra ta pati, tada atnaujinkite, jei (! oldParams.get (key).equals (newParams.get (raktas))) {toSendParams.put (raktas, newParams.get (raktas)); }} else {// rakto senuose paramuose nėra, todėl padėkite! toSendParams.put (raktas, newParams.get (raktas)); } oldParams.put (raktas, newParams.get (raktas)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (raktas)); / * siųsti pranešimą */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Kai norime spausdinti į langą void ShowIncoming () {// norėdami pamatyti gaunamą pranešimą, kaip nustatyta „HashMap“tekste („Incoming from Arduino“, 20, 20); int y = 20; for (Stygos raktas: newParams.keySet ()) {y = y+20; tekstas (raktas, 20, y); tekstas (newParams.get (raktas), 300, y); }}

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

void setup () {dydis (1000, 800); // Scenos dydžio užpildymas (255); fonas (0); oldParams = naujas HashMap (); newParams = naujas „HashMap“(); // printArray (Serial.list ()); commsPort = naujas serijinis (tai, prievado pavadinimas, baudos greitis);

/ * pradėti oscP5, klausytis gaunamų pranešimų */ oscP5 = naujas OscP5 (tai, listenPort);

/* „myRemoteLocation“yra „NetAddress“. „NetAddress“turi 2 parametrus, * IP adresą ir prievado numerį. „myRemoteLocation“naudojama kaip parametras * oscP5.send () siunčiant osc paketus į kitą kompiuterį, įrenginį, * programą. naudojimą žr. žemiau. bandymo tikslais klausymosi prievadas * ir nuotolinės vietos adreso prievadas yra tas pats, todėl * siųsite pranešimus atgal į šį eskizą. */ myRemoteLocation = naujas NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// skaitykite baitą iš nuoseklaus prievado: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // prašyti daugiau println ("pradedant …"); pertrauka; atvejis startChar: gaunamas = ""; pertrauka; case endChar: messageArrived = tiesa; // println ("žinutės pabaiga"); pertrauka; numatytasis: gaunamas += inChar; pertrauka; }}

/* gaunamas osc pranešimas persiunčiamas į oscEvent metodą. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // gauti 1 osc argumentą

IncomingOSCMessage + = "\ n" + String.format ("### gavo osc pranešimą:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", vertė); println („IncomingOSCMessage“); }

3 žingsnis: koduokite „Arduino“

Kodas Arduino
Kodas Arduino

/* Šis kodas yra pagrindinis eskizas, skirtas bendrauti su apdorojimu per seriją.

Tai yra planas, kuriame galite įdėti savo kodą, nurodytą jūsų mygtukams, potenciometrams ar jutikliams.

Jis turi paspausti ranką, kad įsitikintume, jog turime kontaktą ir nuspręsta, kokiu formatu mes bendraujame

Svarbu sukurti tokį patį pranešimą, kad apdorojimas žinotų, kaip jį dekonstruoti ir siųsti teisingus OSC pranešimus į mūsų DAW

sukurtas „werkcollege AV&IT“spalio 2017 d

kodo išlyginimas, sukurtas 2007 m. balandžio 22 d. David A. Mellis, pakeistas Tom Igoe 2012 m. balandžio 9 d

*/

/ baudos sparta konst ilgas baudos greitis = 115200;

// laikas laukti ms tarp apklausų iki kaiščių const int loopPauseTime = 200; // mili sekundės

// pranešimo, išsiųsto Serial const, pradžios ir pabaigos reikšmės String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int mygtukasPin1 = 2; const int mygtukasPin2 = 5; const int numReadings = 5; // rate van smoothing

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

// kiti globalūs kintamieji int buttonState1 = 0; int mygtukasStatus2 = 0; // kintamasis, skirtas nuskaityti mygtuko būsenos plūdės jutiklįValue1 = 0; plūdės jutiklisVertė2 = 0; plūdės jutiklisVertė3 = 0;

// int lygių išlyginimas [numReadings]; // rodmenys iš analoginio įėjimo int readIndex3 = 0; // dabartinio rodmens indeksas int total3 = 0; // veikiančio bendro plūdės vidurkis3 = 0; // Vidutinis

// Mums reikia šios funkcijos, kad užmegztume ryšį su apdorojimo eskizu // Palikite jį čia void createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // atsiųsti char ir laukti atsakymo… delay (loopPauseTime); } Serial.read (); }

void setup () {// nustatyti pinModes visiems kaiščiams pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// inicijuoti Serial comms Serial.begin (baudRate); while (! Serial); // išlyginimas (int thisReading = 0; thisReading <numReadings; thisReading ++) {skaitai [thisReading] = 0; }

// laukti rankos paspaudimo nustatytiContact (); }

void loop () {// apklausti visus kaiščius ir susieti rodmenis su atitinkamu diapazonu buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// gaunamų verčių susiejimas su būtinomis reikšmėmis sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = žemėlapis (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = žemėlapis (sensorValue3, 0, 700, 50, 100);

// glotninimo jutiklis: total3 = total3 - rodmenys [readIndex3]; // skaityti iš jutiklio: rodmenys [readIndex3] = sensorValue3; // pridėti rodmenį prie viso: total3 = total3 + rodmenys [readIndex3]; // pereiti į kitą masyvo vietą: readIndex3 = readIndex3 + 1;

// jei esame masyvo pabaigoje… if (readIndex3> = numReadings) {//… apvyniokite pradžią: readIndex3 = 0; } // apskaičiuoti vidurkį: vidurkis3 = (total3 / numReadings); // glotninimo jutiklis

Serial.print (startString); // pradėti pranešimų seką // ištrinti visus vardus, reikšmių poras, atskirtas kableliais Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

Serijinis atspaudas („potentio2“); Serial.print (","); Serial.print (sensorValue2); Serial.print (",");

Serial.print („infra-jutiklis“); Serial.print (","); Serijinis atspaudas (vidurkis3/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);

// parašykite pranešimo pabaigą Serial.print (endString);

// palauk truputi..

uždelsimas (loopPauseTime); }

4 žingsnis: javapjovė

Javapjovė
Javapjovė

1 žingsnis: Ga bovenaan naar Parinktys> Prefrences

2 etapas: „Pre Control“/„OSC“/žiniatinklio ir „Add“priedai

3 žingsnis: „Kies bij Control“paviršiaus režimas arba OSC („Open Sound Control“)

4 žingsnis: Vul je įrenginio pavadinimą, gaukite prieigą prie prievado, kad gautumėte apdorojimo informaciją „Sendport staat“

5 žingsnis: „IP adreso kopijavimas“yra apdorojamas

6 žingsnis: „Druk op ok en en control“yra verbonden met Reaper

5 žingsnis: Behuizing

Behuizing
Behuizing

Plotis: 170 mm

Ilgis: 90 mm

Hoogte 30 mm

Smeigtukas: 16 mm (skersmuo)

Potenciometrai: 3 mm (skersmuo)

Afstand jutiklis: Breedte 2,9 mm

Ilgis 0,8 mm

Medžiaga: MDF (3 mm)

6 žingsnis: „Elektronica“

1 žingsnis:

„Verbind de ground“ir 5 voltų „Arduino“ir duonos lentos

2 žingsnis:

Verbindo kaištis A0 ir potencialas 1

Veiksmažodžio kaištis A1 ir potencialas 2

Verbind pin A3 ir infrarood jutiklis.

Verbind pin A2 matė lipnų mygtuką.

Verbind pin A5 ir lipnus mygtukas.

7 žingsnis: „Medewerkers“

Medewerkers
Medewerkers

- Mayes El Baba

- Arno Gorissenas

- Michielis De Wandelaeris

Rekomenduojamas: