สารบัญ:

โครงการ Guitar Hero Arduino: 12 ขั้นตอน (พร้อมรูปภาพ)
โครงการ Guitar Hero Arduino: 12 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: โครงการ Guitar Hero Arduino: 12 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: โครงการ Guitar Hero Arduino: 12 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ทำไมเเม่ไม่บอกกันเลย😂 #แป้งวิงค์ไวท์ 2024, พฤศจิกายน
Anonim
โครงการ Guitar Hero Arduino
โครงการ Guitar Hero Arduino
โครงการ Guitar Hero Arduino
โครงการ Guitar Hero Arduino
โครงการ Guitar Hero Arduino
โครงการ Guitar Hero Arduino

Wij zijn Maarten Vrebos, Justin Cavanas และ Wannes Stroobandt en เราศึกษาด้านมัลติมีเดียและการสื่อสารเทคโนโลยี ในโครงการ voor het vak Audiovisual & IT Principles hebben wij een Guitar Hero-gitaar gehackt en gebruikt als behuizing voor onze MIDI-controller. Het กำลังนอนอยู่บนเตียง om de bestaande knoppen op de gitaar intern te vervangen Onze controller zal vastgehouden en bespeeld worden als een normale gitaar. ตัวควบคุม Onze Aangezien เรา iets hebben gehackt hebben เรา er niet veel วัสดุพิเศษใน moeten verwerken

In de afbeelding kan u onze allereerste schets op papier zien van hoe het eindproduct er zou moeten uitzien met daarnaast een foto van de gitaar die als behuizing zal worden gebruikt. ในการทำงานร่วมกัน

Wij hebben ons voor dit โครงการ gebaseerd op volgende bronnen:

slapyak.wordpress.com/guitar-hero-midi-con…

www.instructables.com/id/Converting-a-rescu…

gizmodo.com/391834/turn-your-guitar-hero-g…

โครงการเบโนดิกเฮเดน voor dit

  • ปุ่มกดไคลน์ 6 ปุ่ม
  • ตัวต้านทาน 7 1kohm
  • 1 เจล LED 1
  • blauwe LED
  • 1 Arduino Uno R3
  • 1 groene LED
  • ไฟ LED 2 ดวง
  • 1 ชุยฟชาเคลาร์
  • 1 เขียงหั่นขนม
  • 1 โพเทนชิออมิเตอร์
  • 1 โพรโทบอร์ด
  • กีตาร์ฮีโร่ 1 ตัว กีต้าร์
  • เครื่องนอน Voldoende
  • วัสดุประสาน/dremelen/
  • Schroevendraaier

ขั้นตอนที่ 1: Componenten Verzamelen

คอมโพเนนท์ แวร์ซาเมเลน
คอมโพเนนท์ แวร์ซาเมเลน

Voor ons ต้นแบบ (op breadboard) hebben we volgende componenten gebruikt:

6 ปุ่มกด

7 1kohm ตัวต้านทาน

1 LED สีเหลือง

1 ไฟ LED สีฟ้า

1 Arduino Uno R3

1 LED สีเขียว

2 LED สีแดง

1 ชุยฟชาเคลาอาร์

1 เขียงหั่นขนม

1 โพเทนชิออมิเตอร์

ขั้นตอนที่ 2: ต้นแบบ Bouwen

ต้นแบบ Bouwen
ต้นแบบ Bouwen
ต้นแบบ Bouwen
ต้นแบบ Bouwen
ต้นแบบ Bouwen
ต้นแบบ Bouwen

Om ons รุ่นต้นแบบ te bouwen hebben we al onze componenten gebruikt op een breadboard, deze breadboard dient dan als testobject zodat we niet meteen in de behuizing te werk moeten gaan. Dit ต้นแบบ hebben เราและ ok gedigitaliseerd ผ่าน tinkercad.com, op deze manier hadden เราเคยเห็น duidelijk overzicht van ons ต้นแบบ dat elk groepslid ook kon bewerken

Er worden 5 kleine pushbuttons gebruikt die fungeren als 5 snaren en een grote pushbutton die in combinatie met één of meerdere 'snaren' moet worden ingedrukt om een auditief effect te krijgen หลอดไฟ LED แบบอื่นๆ หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED หลอดไฟ LED สำหรับหลอดไฟ LED

ขั้นตอนที่ 3: รหัสต้นแบบ

รหัสต้นแบบ
รหัสต้นแบบ

ตัวแปรโกลบอล

In het eerste deel van de code initialiseer je globale variabelen voor de pins van arduino uno waar ทั้งหมด ปุ่มกด mee verbonden zijn

// zet หมายเลขพิน waar mainButton(snaar) en andere ปุ่ม aan verbonden zijn:const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // nummer van pushbutton1 const int buttonPin2 = 3; // หมายเลข van pushbutton2const int buttonPin3 = 4; // หมายเลข van pushbutton3const int buttonPin4 = 5; // หมายเลข van pushbutton4const int buttonPin5 = 6; // หมายเลขรถตู้ pushbutton5

Hierna worden er twee arrays aangemaakt voor de namen van de pushbuttons en hun pinnummer.

const int aantalKnoppen = 5;const สตริง namenKnoppen[aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen[aantalKnoppen] = {2, 3, 4, 5, 6};

En dan nog variabelen สำหรับ หมุด แวน เดอ LED lichtjes.

const int ledPin1 = 13; // จำนวนพิน LED 13

const int ledPin2 = 12; // จำนวน LED pin 12 const int ledPin3 = 11; // จำนวน LED pin 11 const int ledPin4 = 10; // จำนวน LED pin 10 const int ledPin5 = 9; // จำนวน LED pin 9 const int potPin = A5; // จำนวน LED พิน A5

ตัวแปร globale Variabelen dienen นั้น 'states' สำหรับเซ็นเซอร์ (zijn de pushbuttons ingedrukt of niet? potentiometer, lichtsensor)

// initialiseer buttonState สำหรับ knoppen (ingedrukt ของ niet)int mainButtonState = 0; int buttonState1 = 0; int buttonState2 = 0; int buttonState3 = 0; int buttonState4 = 0; int buttonState5 = 0; int lightSensorState = 0; int potValue = 0; int lightValue = 0;

ติดตั้ง

ฟังก์ชันการตั้งค่า Nu volgt de void Deze เป็น van het type void (geeft geen waarde terug) en de Instrucies hierin worden maar 1 keer uitgevoerd.

Bij elke functie เป็น commentaar geschreven wat er concreet gedaan wordt Extra uitleg over wat een specifieke functie concreet doet is te vinden in de arduino อ้างอิง

การตั้งค่าเป็นโมฆะ () {// อัตราข้อมูลต่อวินาที (baud) สำหรับการส่งข้อมูลแบบอนุกรม Serial.begin (9600); // Initialiseer de ledPin variabelen als เอาต์พุต pinMode (ledPin1, OUTPUT); โหมดพิน (ledPin2, เอาต์พุต); โหมดพิน (ledPin3, เอาต์พุต); โหมดพิน (ledPin4, เอาต์พุต); โหมดพิน (ledPin5, เอาต์พุต); // initialiseer alle ปุ่มกด als อินพุต: pinMode (mainButton, INPUT); pinMode (ปุ่ม Pin1, INPUT); pinMode(ปุ่มPin2, INPUT); pinMode (ปุ่ม Pin3, INPUT); pinMode (ปุ่ม Pin4, INPUT); pinMode (ปุ่ม Pin5, INPUT); โหมดพิน (potPin, INPUT); pinMode (เซ็นเซอร์วัดแสง, INPUT); }

ฟังก์ชั่นโมฆะ

การติดตั้ง () functie volgt de loop () functie, คำสั่งตาย hierin staan gaan herhaald uitgevoerd worden.

วงเป็นโมฆะ () { // lees de staat van de pushbuttons uit (ingedrukt ของ niet) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (ปุ่มพิน1); buttonState2 = digitalRead (ปุ่มพิน2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);

// สถานะปุ่มกด alle ใน een array

int buttonState = {buttonState1, buttonState2, buttonState3, buttonState4, buttonState5};

// leest de waarde uit van de potentiometer en de lichtsensor

potValue = analogRead (potPin); lightValue = analogRead (เซ็นเซอร์แสง);

// ผู้ประกาศ een array mainStates en geef die de standard waarden 0 นิ้ว

int mainStates = {0, 0, 0, 0, 0};

// วนซ้ำ de array aantalKnoppen

สำหรับ (int i = 0; i < aantalKnoppen; i++){ pinMode(knopPinnen, INPUT); // initialiseer alle knopPinnen als อินพุต digitalRead(knopPinnen); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt คือ, พิมพ์ alle knopnamen, alle buttonstates if (mainButtonState == HIGH) { Serial.print (namenKnoppen ); Serial.print(", "); Serial.println(ปุ่มสถานะ); } }

ขั้นตอนที่ 4: ต้นแบบ Uittesten

Nadat het ต้นแบบ gebouwd เป็นรุ่น volgens ons en de code geschreven อยู่ในระหว่างการประมวลผล เป็น het tijd om het ต้นแบบ uit te testen ทางเลือกของวิดีโอคือ te zien dat alle knoppen een reactie geven op de bijhorende ledjes en dat ook combinaties van knoppen mogelijk zijn

ในวิดีโอทวีตคือ te zien hoe onze tremolo werkt aan de hand van een potentiometer in de gitaar en hoe de waardes worden uitgelezen in Processing

ขั้นตอนที่ 5: ปรับแต่ง "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

โค้ดที่ถูกต้องถูกต้อง werkte op het ต้นแบบ zijn we begonnen met het "ontmantelen" van onze Guitar Hero-gitaar We hebben de gitaar opengemaakt พบกับ een schroevendraaier en bekeken welke originele componenten we eventueel nog zouden kunnen hergebruiken voor onze controller. Uiteindelijk hebben เรา onze ปุ่มกด eigen ในปุ่ม de bestaande gekregen (zie volgende stap) เราใช้ tremolo ok gebruikt voor ons eindproduct en voor onze hoofdbutton (ปุ่มเริ่มต้น om als een combinatie af te spelen) hebben we ook de originele twee buttons gebruikt (zie vierde foto) เดอ LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat alle knoppen correct werkten.

ขั้นตอนที่ 6: ปุ่ม Werking Originele + Dremelen

ปุ่ม Werking Originele + Dremelen
ปุ่ม Werking Originele + Dremelen

วิดีโอ Op de bijhorende is de wijze te zien waarop de twee originele knoppen werken als een soort van schakelaar die wij gebruiken om een effect te genereren bij combinatie van knoppen

Om onze eigen buttons te verwerken in de originele knoppen hebben we de binnenkant van de originelen er grotendeels uitgehaald zoals te zien is op de foto. ลงชื่อเข้าใช้

ขั้นตอนที่ 7: Bedrading Solderen + Buttons Vastlijmen

Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen
Bedrading Solderen + Buttons Vastlijmen

Omdat we niet meer met een เขียงหั่นขนม werken moeten de draden gesoldeerd worden om zo de verschillende องค์ประกอบพบ elkaar te verbinden Nadat dit gebeurd is kunnen we de buttons vastlijmen zoals te zien is op de foto's. ภาพเพิ่มเติม Eens dit gebeurd เป็น kunnen we doorgaan naar de volgende stap

ขั้นตอนที่ 8: Plaats ทำใน De Behuizing

Plaats ทำใน De Behuizing
Plaats ทำใน De Behuizing
Plaats ทำใน De Behuizing
Plaats ทำใน De Behuizing
Plaats ทำใน De Behuizing
Plaats ทำใน De Behuizing

Omdat dit Guitar Hero-รุ่น redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. ดรีมเลิน Zo hebben we uit de achterkant van de gitaar een hele strook verwijderd zodat er meer plaats ontstaat voor de bedrading in de gitaar. เข้าสู่ระบบ Omdat er overal ใน de binnenkant obstakels waren, waaronder veel buisjes om de vijzen in te bevestigen, hebben เราตาย ok verwijderd om optimaal van de gegeven ruimte gebruik te kunnen maken รูปภาพจากภาพถ่ายและภาพถ่ายคือภาพถ่ายจากภาพถ่ายที่เราคุ้นเคยในภาพถ่ายที่สวยงามและมีชีวิตชีวา รูปภาพจากด้านบนเป็นภาพที่เราเดอ draden ตาย rechtstreeks verbonden worden กับประตู Arduino een gat ใน de onderkant van de gitaar de behuizing verlaten

ขั้นตอนที่ 9: การจัดเตียง Aansluiten Op Protobord

Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord
Bedrading Aansluiten Op Protobord

Om alle componenten พบกับ elkaar te verbinden hebben we gebruik gemaakt van een protobord. Dit is een bordje dat eigenlijk op net dezelfde manier werkt als een breadbord, maar dan berouwbaarder en ประสิทธิภาพ. We hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde foto. รูปและวิดีโอ Instagram Dit bord is het centrale punt van waaruit al onze verbindingen vertrekken en Samenkomen(zie foto 2)

ขั้นตอนที่ 10: Verstevigen

Verstevigen
Verstevigen

สัมผัสสุดท้ายเป็น het verstandig om de losse delen te verstevigen voor extra stabiliteit. ภาพที่ถ่ายจากภาพคือภาพที่สวยงาม เรามองเห็นภาพชัดว่าภาพของเราเป็นอย่างไร dremelen achteraan de ปุ่ม verstevigen พบ stukjes karton

ขั้นตอนที่ 11: Code Voor Het Communiceren พบ Reaper

ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper
ชุมชน Code Voor Het พบ Reaper

รหัส Deze เป็น opgedeeld ใน twee delen, het eerste deel อยู่ใน de arduino IDE (สภาพแวดล้อมการพัฒนาแบบโต้ตอบ) geschreven Die code wordt โหลดที่ Arduino zelf en dient om alle waarden van de sensors van de midi controller uit te lezen en door te sturen naar processing.

กำลังประมวลผลเป็นทวีคูณ gedeelte Deze code dient om alles wat arduino doorstuurt te ontvangen en door te sturen ที่ Reaper

Arduino

/* รหัสนี้เป็นแบบร่างพื้นฐานในการสื่อสารกับการประมวลผลผ่านซีเรียล

เป็นพิมพ์เขียวที่คุณสามารถใส่รหัสของคุณเองได้

ระบุไว้สำหรับปุ่ม โพเทนชิโอมิเตอร์ หรือเซ็นเซอร์ของคุณเอง

มีการจับมือเพื่อให้แน่ใจว่าเราได้ติดต่อ

และกำหนดรูปแบบที่เราจะสื่อสารกัน

สิ่งสำคัญคือต้องสร้างข้อความในลักษณะเดียวกัน

เพื่อให้การประมวลผลรู้วิธีแยกแยะและส่งข้อความ OSC ที่ถูกต้องไปยัง DAW. ของเรา

สร้างขึ้นสำหรับ werkcollege AV&IT

ต.ค. 2017

*

/ อัตราบอด

const ยาว baudRate = 115200;

// เวลารอเป็นมิลลิวินาทีระหว่างโพลไปยังพิน

const int loopPauseTime = 200; // มิลลิวินาที

// ค่าเริ่มต้นและสิ้นสุดสำหรับข้อความที่ส่งบน Serial

const สตริง startString = "*", endString = "#";

const char contactCharacter = '|';

// pin id ของ

// ตัวแปรโกลบอลอื่น ๆ

const int aantalKnoppen = 5; const สตริง namenKnoppen[aantalKnoppen] = {"knop 1", "knop 2", "knop 3", "knop 4", "knop 5"}; const int knopPinnen[aantalKnoppen] = {2, 3, 4, 5, 6}; const int mainButton = A1;

int mainButtonState = 0;

int potValue = 0;

// เซ็นเซอร์อะนาล็อก

const int potPin = A5; // ปักหมุด voor tremolo

// เราต้องการฟังก์ชันนี้เพื่อติดต่อกับร่างการประมวลผล

// เก็บไว้ที่นี่เป็นโมฆะ createContact () { ในขณะที่ (Serial.available () <= 0) { Serial.print (contactCharacter); // ส่งถ่านและรอการตอบกลับ… ล่าช้า (loopPauseTime); } Serial.read(); }

การตั้งค่าเป็นโมฆะ () {

// ตั้งค่า pinModes สำหรับพินทั้งหมดสำหรับ (int i = 0; i < aantalKnoppen; i++){ pinMode(knopPinnen, INPUT); } pinMode (ปุ่มหลัก, อินพุต); // uncomment หากคุณใช้เซ็นเซอร์ที่ทำงานบน 3V แทน 5V // คุณจะต้องต่อพิน 'ext' ไปที่ 3.3V เช่นกัน // analogReference(EXTERNAL);

// เริ่มต้น Serial comms

Serial.begin(อัตราบอด); ในขณะที่ (!ซีเรียล); // รอการจับมือสร้างContact(); }

วงเป็นโมฆะ () {

// ขั้นตอนที่ 1: ปุ่มอ่าน // สำรวจพินทั้งหมดและจับคู่การอ่านกับช่วงที่เหมาะสม int buttonStates[aantalKnoppen]; /* buttonStates[0] = digitalRead (knopPinnen[0]); buttonStates [1] = digitalRead (knopPinnen [1]); buttonStates[2] = digitalRead (knopPinnen[2]); buttonStates[3] = digitalRead (knopPinnen[3]); buttonStates[4] = digitalRead (knopPinnen[4]); */ mainButtonState = digitalRead (mainButton); สำหรับ(int i = 0; i < aantalKnoppen; i++){ buttonStates = digitalRead(knopPinnen); } potValue = analogRead (potPin); // ตัวอย่าง: // float v0 = แผนที่ (bpm, 0, 1023, 60, 250); // หากคุณต้องการใช้ทุ่นปกติ (เช่น สำหรับโวลุ่ม) // float v1 = map(analogRead(pin2), fromMin, fromMax, 0, 100) / 100.0;

// ขั้นตอนที่ 2: เขียนข้อความ

Serial.print (startString); // เริ่มลำดับข้อความสำหรับ (int i = 0; i < aantalKnoppen; i++){ if(mainButtonState == HIGH){ Serial.print(namenKnoppen); Serial.print(", "); Serial.print(ปุ่มสถานะ); if(i < aantalKnoppen - 1){ Serial.print(", "); } }อื่น{ buttonStates = 0; Serial.print(namenKnoppen); Serial.print(", "); Serial.print(ปุ่มสถานะ); if(i < aantalKnoppen - 1){ Serial.print(", "); } } } Serial.print(", "); Serial.print("ลูกคอ"); Serial.print(", "); Serial.print(แผนที่(potValue, 0, 1023, 0, 100)); // เขียนส่วนท้ายของข้อความ Serial.print(endString);

// รอสักครู่..

ล่าช้า (loopPauseTime); }

กำลังประมวลผล

ข้อจำกัดความรับผิดชอบ: Niet alle code van de processing sketch staat hier in geschreven, voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde ใน bijlage

คำสั่ง volgende moeten aangepast worden (อินเดียน nodig):

// Baudrate moet hetzelfde zijn zoals ใน Arduino sketch

int baudRate สุดท้าย = 115200;

// Zoek naar het ที่อยู่ IP ในเครื่องเก็บเกี่ยว (ภาพหน้าจอ zie ใน bijlage)

// กำลังประมวลผล stuurt naar dit andres en reaper luistert hier naar //

//final String remoteIP = "192.168.1.43"; //เช่น. "127.0.0.1";

Final String remoteIP = "10.3.209.60";

// จด sendPort และกรอกข้อมูลใน Reaper

// นี่คือพอร์ตที่การประมวลผลส่งไปและ Reaper รับฟัง

ขั้นสุดท้าย listenPort = 12000, sendPort = 12000;

// ListenPort ที่นี่คือการดีบักอย่างแข็งขัน

// portNames อยู่ที่นี่เพื่อแก้ไขข้อบกพร่องเช่นกัน

//สตริงสุดท้าย portName = "/dev/ttyACM0";

สตริงสุดท้าย portName = "COM5"; // "/dev/ttyUSB0";

///////////////////// สิ้นสุดพารามิเตอร์ผู้ใช้ //////////////////////// ////

นำเข้าการประมวลผล.ซีเรียล.*;

นำเข้า java.util.*;

นำเข้า oscP5.*;

นำเข้า netP5.*;

OscP5 oscP5;

NetAddress myRemoteLocation;

Serial commsPort; // พอร์ตอนุกรม

ข้อความบูลีนมาถึง = false;

สตริงขาเข้า = "", OSCMessage ขาเข้า = "";

อักขระสุดท้าย startChar = '*', endChar = '#'; อักขระสุดท้าย contactCharacter = '|';

// เพื่อให้แน่ใจว่าเราส่งเฉพาะพารามิเตอร์ (ค่า) ที่เปลี่ยนแปลง

// ตัวแปรทั่วโลกเหล่านี้ถูกอธิบายไว้ที่นี่ แต่ควร // ไม่ควรเริ่มต้นที่นี่! HashMap oldParams, newParams, toSendParams;

// เราจำเป็นต้องแยกข้อความที่ทุกลูกน้ำ

เป็นโมฆะ processIncoming () { สตริง 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 (ยกเว้นข้อยกเว้น) { println ("ข้อความข้อยกเว้น: " + อดีต); printArray(resVec); ทางออก(); } }

// เพื่อกรองข้อความของเรา

/* เราตรวจสอบให้แน่ใจว่ามีเพียงข้อความออก OSC เมื่อ * ข้อความอินพุต (ซีเรียล) เปลี่ยนแปลง * นั่นคือ: หากเราเปิด/กดปุ่ม และมันจะเปลี่ยนค่า * ดังนั้นเราจึงกรองค่าที่เข้ามาที่เปลี่ยนแปลงจริงออก * หมายเหตุ: เราจะไม่หลีกเลี่ยงค่ากระโดด * เนื่องจากมาจากมาตรความเร่งหรือเซ็นเซอร์ระยะทาง * คุณจะต้องทำให้ค่าเหล่านั้นราบรื่นใน Arduino */ void filterParams () { toSendParams = new แฮชแมป (); สำหรับ (คีย์สตริง: newParams.keySet ()) { // หากคีย์มีอยู่แล้วหาก (oldParams.containsKey (คีย์)) { // คีย์ปัจจุบันและค่าไม่เหมือนกัน ให้อัปเดตหาก (!oldParams.get (คีย์)). เท่ากับ (newParams.get (คีย์))) { toSendParams.put (คีย์ newParams.get (คีย์)); } } else{ // ไม่มีคีย์ใน params เก่า ดังนั้นวางไว้! toSendParams.put(คีย์ newParams.get(คีย์)); } oldParams.put(คีย์ newParams.get(คีย์)); } }

เป็นโมฆะ makeOSC () {

สำหรับ (คีย์สตริง: toSendParams.keySet ()) { OscMessage myMessage = ใหม่ OscMessage ("/" + คีย์); myMessage.add(toSendParams.get(คีย์)); /* ส่งข้อความ */ oscP5.send(myMessage, myRemoteLocation); } }

เป็นโมฆะ translateMessage () {

กระบวนการขาเข้า (); filterParams(); makeOSC(); } // เมื่อเราต้องการพิมพ์ไปที่หน้าต่าง void ShowIncoming() { // เพื่อดูข้อความขาเข้าตามที่กำหนดไว้ในข้อความ HashMap ("ขาเข้าจาก Arduino", 20, 20); int y = 20; สำหรับ (คีย์สตริง: newParams.keySet()) { y = y+20; ข้อความ(คีย์, 20, y); ข้อความ (newParams.get(คีย์), 300, y); } }

เป็นโมฆะ showOsc () {

ข้อความ (OSCMessage ขาเข้า 300, 200); OSCMessage ขาเข้า =""; }

การตั้งค่าเป็นโมฆะ () {

ขนาด (1000, 800); // ขนาดสเตจ เติม (255); พื้นหลัง(0); oldParams = ใหม่ HashMap (); newParams = ใหม่ HashMap (); //printArray(Serial.list()); commsPort = ซีเรียลใหม่ (นี่, ชื่อพอร์ต, baudRate);

/* เริ่ม oscP5 ฟังข้อความขาเข้า */

oscP5 = OscP5 ใหม่ (นี่, listenPort);

/* myRemoteLocation คือ NetAddress NetAddress รับ 2 พารามิเตอร์

* ที่อยู่ IP และหมายเลขพอร์ตmyRemoteLocation ใช้เป็นพารามิเตอร์ใน * oscP5.send() เมื่อส่งแพ็กเก็ต osc ไปยังคอมพิวเตอร์ อุปกรณ์ แอปพลิเคชัน * เครื่องอื่น การใช้งานดูด้านล่าง สำหรับวัตถุประสงค์ในการทดสอบพอร์ตการฟัง * และพอร์ตของที่อยู่ตำแหน่งระยะไกลจะเหมือนกัน ดังนั้นคุณจะ * ส่งข้อความกลับไปที่ร่างนี้ */ myRemoteLocation = NetAddress ใหม่ (remoteIP, sendPort); }

โมฆะวาด () {

ถ้า (messageArrived) { พื้นหลัง (0); แปลข้อความ (); แสดงขาเข้า (); messageArrived=เท็จ; } showOsc(); }

เป็นโมฆะ serialEvent (Serial commsPort) {

// อ่านไบต์จากพอร์ตอนุกรม: char inChar = commsPort.readChar(); สวิตช์ (inChar) { กรณี contactCharacter: commsPort.write (contactCharacter); // ขอเพิ่มเติม println("starting…"); หยุดพัก; กรณี startChar: ขาเข้า = ""; หยุดพัก; case endChar: messageArrived = true; //println("ข้อความสิ้นสุด"); หยุดพัก; ค่าเริ่มต้น: ขาเข้า += inChar; หยุดพัก; } }

/* ข้อความ osc ขาเข้าจะถูกส่งต่อไปยังเมธอด oscEvent */

โมฆะ oscEvent (OscMessage theOscMessage) { ค่าลอย = theOscMessage.get (0).floatValue (); // รับอาร์กิวเมนต์ osc ที่ 1

OSCMessage ขาเข้า += "\n" +

String.format("### ได้รับข้อความ osc: " + " addrpattern: " + theOscMessage.addrPattern() + ": %f", ค่า); println(OSCMessage ขาเข้า); }

ขั้นตอนที่ 12: คอนโทรลเลอร์ Uittesten

Nu alles คือ aangesloten รหัส alle คือ geschreven en alles คือ gedubbelcheckt คือ het eindelijk tijd om de controller z'n werk te laten doen Zoek een paar leuke effecten op Reaper en geniet van de voltooide Guitar Hero MIDI Controller!

แนะนำ: