Innholdsfortegnelse:

Retro kontroller: 7 trinn
Retro kontroller: 7 trinn

Video: Retro kontroller: 7 trinn

Video: Retro kontroller: 7 trinn
Video: Кто изобрел D-Pad? 2024, November
Anonim
Retro kontroller
Retro kontroller

Vi er våre første år studenter fra utdannelsen Multimedia & Communicatietechnology (Multec) aan de Erasmushogeschool Brussel.

Samme har vi en musikkontroller som gjør at musikk kan starte/stoppe, den kan overføre, komme tilbake og mer.

Vår idé kom fra en kassett, og målet var å kontrollere en kassett.

Trinn 1: Wat Heb Je Nodig?

Wat Heb Je Nodig?
Wat Heb Je Nodig?

Komponent

- 2 knapper;

- 2 potensiometer

- 2 weerstanden (1K elg);

- Arduino uno/nano

- Draadjes (zie elektronisk skjema)

- Soldeerplaat

- MDF -plate

Verktøy

- Laserkutter

- Kniptang

- Striptang

- Soldeerbout (met tin)

Programmer

- Illustrator/indesign (Tekenprogram)

- Reaper

- Behandling

- Arduino

Trinn 2: Kodebehandling

Kodebehandling
Kodebehandling

/**

* Grunnleggende skisse for å motta serielle meldinger fra Arduino * og oversette dem til OSC-meldinger for Reaper * * Du må tilpasse BRUKERPARAMETRE * og du må installere et bibliotek: oscP5 * * laget for werkcollege AV&IT * av annoo bob eddi * okt 2017 * */////////////////////// USER PARAMETERS ////////////////////// //////////

/ sørg for at du bruker den samme overføringshastigheten i Arduino sketch siste int baudRate = 115200;

// Gå og se etter IP-adressen i Reaper når du bruker OSC // Dette er adressen Behandlingen sender til og Reaper lytter til. // Sett denne strengen i remoteIP, her.

// final String remoteIP = "192.168.1.43"; // f.eks. "127.0.0.1";

final String remoteIP = "vul hier ip in found in reaper";

// Legg merke til sendPort og fyll ut dette i Reaper. // Dette er porten Processing sender til og Reaper lytter til.

siste int listenPort = 11000, sendPort = 12000;

// ListenPort her er for å feilsøke aktivt.

// portnavnene er også her for å feilsøke.

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

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

//////////////////////// END OF USER PARAMETERS //////////////////////// ////

import behandling. serie.*; import java.util.*;

import oscP5.*; import netP5.*;

OscP5 oscP5; NetAddress myRemoteLocation;

Seriell commsPort; // Den boolske meldingen Serial portArrived = false;

String incoming = "", IncomingOSCMessage = "";

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

// For å være sikker på at vi bare sender parametrene (verdiene) som endres // er disse globale variablene delcared her, men bør // ikke initialiseres her! HashMap oldParams, newParams, toSendParams;

// Vi må dele meldingen ved hvert komma -tomrom processIncoming () {String resVec = incoming.split (","); // vi får navn+verdi par // så for hvert navn (+2) … prøv {for (int i = 0; i <resVec.length; i+= 2) {float value = Float.parseFloat (resVec [i+ 1]); // legg dem i den nye Hashtable newParams.put (resVec , verdi); }} // // hvis det oppstår en feil, la oss få den vist og gå ut. catch (Unntak eks) {println ("Unntaksmelding:" + eks); printArray (resVec); exit(); }}

// For å filtrere meldingene våre/ * Vi sørger for at det bare er en OSC-utmelding når * inndatameldingen (seriell) endres * Det vil si: hvis vi snur/trykker på knappen og den endrer verdi. * Så vi filtrerer ut de innkommende verdiene som faktisk endres * merk: vi vil ikke unngå hoppverdier * som kommer fra f.eks. Akselerometre eller avstandssensorer * du må glatte dem selv i Arduino */ void filterParams () {toSendParams = new HashMap (); for (String key: newParams.keySet ()) {// hvis nøkkelen allerede er til stede hvis (oldParams.containsKey (key)) {// key present and value not the same, then update if (! oldParams.get (key).equals (newParams.get (key))) {toSendParams.put (key, newParams.get (key)); }} else {// nøkkelen er ikke tilstede i gamle params, så si det! toSendParams.put (key, newParams.get (key)); } oldParams.put (nøkkel, newParams.get (nøkkel)); }}

void makeOSC () {for (String key: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/"+ key); myMessage.add (toSendParams.get (nøkkel)); / * send meldingen */ oscP5.send (myMessage, myRemoteLocation); }}

void translateMessage () {processIncoming (); filterParams (); makeOSC (); } // Når vi vil skrive ut til vinduet, ugyldig ShowIncoming () {// for å se innkommende melding, som angitt i HashMap -teksten ("Incoming from Arduino", 20, 20); int y = 20; for (strengnøkkel: newParams.keySet ()) {y = y+20; tekst (nøkkel, 20, y); tekst (newParams.get (nøkkel), 300, y); }}

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

ugyldig oppsett () {størrelse (1000, 800); // Fylling av scenestørrelse (255); bakgrunn (0); oldParams = nytt HashMap (); newParams = nytt HashMap (); // printArray (Serial.list ()); commsPort = new Serial (dette, portnavn, baudRate);

/ * start oscP5, lytt etter innkommende meldinger */ oscP5 = ny OscP5 (dette, listenPort);

/* myRemoteLocation er en NetAddress. en NetAddress tar to parametere, * en ip -adresse og et portnummer. myRemoteLocation brukes som parameter i * oscP5.send () når du sender osc -pakker til en annen datamaskin, enhet, * applikasjon. bruk se nedenfor. For testformål er lytteporten * og porten til den eksterne posisjonsadressen den samme, derfor vil du * sende meldinger tilbake til denne skissen. */ myRemoteLocation = ny NetAddress (remoteIP, sendPort); }

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

void serialEvent (Serial commsPort) {// les en byte fra serieporten: char inChar = commsPort.readChar (); switch (inChar) {case contactCharacter: commsPort.write (contactCharacter); // be om mer println ("starter …"); gå i stykker; case startChar: incoming = ""; gå i stykker; case endChar: messageArrived = true; // println ("end of msg"); gå i stykker; standard: innkommende += inChar; gå i stykker; }}

/* innkommende osc -melding videresendes til oscEvent -metoden. */ void oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // få det første osc -argumentet

IncomingOSCMessage + = "\ n" + String.format ("### mottok en osc -melding:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", verdi); println (IncomingOSCMessage); }

Trinn 3: Kode Arduino

Kode Arduino
Kode Arduino

/* Denne koden er en grunnleggende skisse for å kommunisere med Processing through Serial.

Det er en blåkopi der du kan sette din egen kode spesifisert for dine egne knapper, potensiometre eller sensorer.

Den har et håndtrykk for å sikre at vi har kontakt, og formatet vi kommuniserer i er bestemt

Det er viktig å konstruere meldingen på samme måte, slik at Processing vet hvordan de skal dekonstruere det og sende riktige OSC-meldinger til vår DAW

laget for werkcollege AV&IT oktober 2017

kode smooothing opprettet 22. apr 2007 av David A. Mellis modifisert 9. apr 2012 av Tom Igoe

*/

/ baud rate const long baudRate = 115200;

// tid til å vente i ms mellom meningsmålinger til pinnene const int loopPauseTime = 200; // milli sekunder

// start- og sluttverdier for meldingen som sendes på Serial const String startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id's const int buttonPin1 = 2; const int buttonPin2 = 5; const int numReadings = 5; // rate van utjevning

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

// andre globale variabler int buttonState1 = 0; int buttonState2 = 0; // variabel for avlesning av trykknappstatus float sensorValue1 = 0; float sensorValue2 = 0; float sensorValue3 = 0;

// utjevning av avlesninger [numReadings]; // avlesningene fra den analoge inngangen int readIndex3 = 0; // indeksen for gjeldende lesing int total3 = 0; // det totale flytende gjennomsnittet3 = 0; // den gjennomsnittlige

// Vi trenger denne funksjonen for å opprette kontakt med behandlingsskissen // Hold den her ugyldig etablContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // send en røye og vent på svar … forsinkelse (loopPauseTime); } Serial.read (); }

void setup () {// angi pinModes for alle pins pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (pitchReading, INPUT); pinMode (speedReading, INPUT); pinMode (infraReading, INPUT);

// initialiser Serial comms Serial.begin (baudRate); mens (! Seriell); // smoothing for (int thisReading = 0; thisReading <numReadings; thisReading ++) {readings [thisReading] = 0; }

// vent på håndtrykk etablerContact (); }

void loop () {// poll alle pinnene og kartlegg avlesningen til det aktuelle området buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); sensorValue1 = analogRead (pitchReading); sensorValue2 = analogRead (speedReading); sensorValue3 = analogRead (infraReading);

// kartlegge innkommende verdier til nødvendige verdier sensorValue1 = map (sensorValue1, 0, 1023, 0, 100.0)/-100.0; sensorValue2 = map (sensorValue2, 0, 1023, 0.0, 100) /100.0; sensorValue3 = map (sensorValue3, 0, 700, 50, 100);

// utjevningssensor: total3 = total3 - avlesninger [readIndex3]; // lese fra sensoren: avlesninger [readIndex3] = sensorValue3; // legg til avlesningen i totalen: total3 = total3 + avlesninger [readIndex3]; // gå videre til neste posisjon i matrisen: readIndex3 = readIndex3 + 1;

// hvis vi er på slutten av matrisen … if (readIndex3> = numReadings) {// … vikle rundt til begynnelsen: readIndex3 = 0; } // beregne gjennomsnittet: gjennomsnitt3 = (total3 / numReadings); // utjevningssensor

Serial.print (startString); // start en meldingssekvens // skrot alle navn, verdipar, atskilt med kommaer Serial.print ("potentio1"); Serial.print (","); Serial.print (sensorValue1); Serial.print (",");

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

Serial.print ("infra-sensor"); Serial.print (","); Serial.print (gjennomsnittlig3/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);

// skriv slutten av meldingen Serial.print (endString);

// vent en stund..

forsinkelse (loopPauseTime); }

Trinn 4: Reaper

Reaper
Reaper

Trinn 1: Gå over til alternativer> Forhåndsinnstillinger

Trinn 2: Gå til kontroll/OSC/web og trykk på Legg til

Trinn 3: Velg mellom kontrolloverflatemodus for OSC (åpen lydkontroll)

Trinn 4: Du kan angi enhetsnavn på, motta en port for en vul i behandling av Sendport -staten

Trinn 5: Kopiér verten IP som du ser og ser denne i behandlingen

Trinn 6: Trykk på ok en the controller is no verbonden with Reaper

Trinn 5: Behuizing

Behuizing
Behuizing

Breedte: 170 mm

Lengde: 90 mm

Høyte 30 mm

Knoppen: 16 mm (diameter

Potensiometer: 3 mm (diameter)

Afstandssensor: Breedte 2,9 mm

Lengde 0,8 mm

Materiale: MDF (3mm)

Trinn 6: Elektronikk

Trinn 1:

Tilkobling til bakken og 5 volt van Arduino med brødbrett

Trinn 2:

Koblingspinne A0 med potensio 1

Forbindelsespinne A1 med potensio 2

Verbindingsnål A3 med infrarød sensor.

Koblingsnål A2 med en ikke -klebrig knapp.

Koblingsnål A5 med klebrig knapp.

Trinn 7: Medarbeidere

Medarbeidere
Medarbeidere

- Mayes El Baba

- Arno Gorissen

- Michiel De Wandelaer

Anbefalt: