সুচিপত্র:

গিটার হিরো আরডুইনো প্রকল্প: 12 টি ধাপ (ছবি সহ)
গিটার হিরো আরডুইনো প্রকল্প: 12 টি ধাপ (ছবি সহ)

ভিডিও: গিটার হিরো আরডুইনো প্রকল্প: 12 টি ধাপ (ছবি সহ)

ভিডিও: গিটার হিরো আরডুইনো প্রকল্প: 12 টি ধাপ (ছবি সহ)
ভিডিও: Ekta Chigarette Jalao |একটা সিগারেট জ্বালাও | Hero Alom | Hero Alom New Song 2023 2024, নভেম্বর
Anonim
গিটার হিরো আরডুইনো প্রকল্প
গিটার হিরো আরডুইনো প্রকল্প
গিটার হিরো আরডুইনো প্রকল্প
গিটার হিরো আরডুইনো প্রকল্প
গিটার হিরো আরডুইনো প্রকল্প
গিটার হিরো আরডুইনো প্রকল্প

Wij zijn Maarten Vrebos, Justin Cavanas en Wannes Stroobandt en we Studeren multimedia & Communicatietechnology। Voor een groepsproject voor het vak Audiovisual & IT Principles hebben wij een Guitar Hero-gitaar gehackt en gebruikt als behuizing voor onze MIDI-controller। হেট অনজ বেডোয়েলিং ওম ডি বেস্টান্ডে নোপেন অপ ডি গিতার ইন্টার্ন টে ভারভানজেন। অনজ কন্ট্রোলার Aangezien we iets hebben gehackt hebben we er niet veel extra materiaal in moeten verwerken।

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 project 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…

Benodigdheden voor dit প্রকল্প

  • 6 ক্লেইন পুশবাটন
  • 7 1kohm প্রতিরোধক
  • 1 জেল LED 1
  • blauwe LED
  • 1 Arduino Uno R3
  • 1 গ্রীন LED
  • 2 রড LEDs
  • 1 schuifschakelaar
  • ১ টি রুটিবোর্ড
  • 1 পটেন্টিওমিটার
  • 1 protobord
  • 1 গিটার হিরো গীতার
  • Voldoende bedrading
  • ম্যাটেরিয়াল om te solderen/dremelen/
  • শ্রোবেন্দ্রাইয়ার

ধাপ 1: কম্পোনেন্টেন ভারজামেলেন

কম্পোজেন্টেন ভারজামেলেন
কম্পোজেন্টেন ভারজামেলেন

Voor ons prototype (op breadboard) hebben we volgende ingredientsen gebruikt:

6 পুশবাটন

7 1kohm প্রতিরোধক

1 হলুদ LED

1 নীল LED

1 Arduino Uno R3

1 সবুজ LED

2 লাল LED

1 Schuifschakelaar

1 ব্রেডবোর্ড

1 পটেন্টিওমিটার

ধাপ 2: প্রোটোটাইপ Bouwen

প্রোটোটাইপ Bouwen
প্রোটোটাইপ Bouwen
প্রোটোটাইপ Bouwen
প্রোটোটাইপ Bouwen
প্রোটোটাইপ Bouwen
প্রোটোটাইপ Bouwen

Om ons prototype te bouwen hebben we al onze componentsen gebruikt op een breadboard, deze breadboard dient dan als testobject zodat we de niet meteen in de behuizing te werk moeten gaan। ডিট প্রোটোটাইপ হেবেন

Er worden 5 kleine pushbuttons gebruikt die fungeren als 5 snaren en een grote pushbutton die in combinatie met men of meerdere 'snaren' moet worden ingedrukt om een auditief effect te krijgen। De verschillende LED-lampjes dienen gewoon als visuele controle om er zeker van te zijn dat de interactie succesvol werkt।

ধাপ 3: কোড প্রোটোটাইপ

কোড প্রোটোটাইপ
কোড প্রোটোটাইপ

Globale variabelen

Het eerste deel van de code initialiseer je globale variabelen voor de pins van arduino uno waar alle pushbuttons mee verbonden zijn।

// zet pin number waar mainButton (snaar) en andere buttons aan verbonden zijn: const int mainButton = A1; // gitaar snaar const int lightSensor = A0; const int buttonPin1 = 2; // সংখ্যা ভ্যান pushbutton1 const int buttonPin2 = 3; // সংখ্যা ভ্যান pushbutton2const int buttonPin3 = 4; // সংখ্যা ভ্যান pushbutton3const int buttonPin4 = 5; // সংখ্যা ভ্যান 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 String 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 voor de pins van de LED lichtjes।

const int ledPin1 = 13; // LED পিনের সংখ্যা 13

const int ledPin2 = 12; // LED পিনের সংখ্যা 12 const int ledPin3 = 11; // LED পিনের সংখ্যা 11 const int ledPin4 = 10; // LED পিনের সংখ্যা 10 const int ledPin5 = 9; // LED পিনের সংখ্যা 9 const int potPin = A5; // LED পিন A5 এর সংখ্যা

De laatste globale variabelen dienen als 'states' voor de sensors (zijn de pushbuttons ingedrukt of niet? Potentiometer, lichtsensor)।

// initialiseer buttonStates voor de knoppen (ingedrukt of 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 setup functie। Deze is van het type void (geeft geen waarde terug) en de instructies hierin worden maar 1 keer uitgevoerd।

Bij elke functie is commentaar geschreven wat er concreet gedaan wordt। ওয়াট ইয়েন স্পেসিফিক ফাঙ্কটি কনস্রিট ডোয়েটের উপর অতিরিক্ত আর্টিনো রেফারেন্স

void setup () {// data rate per seconde (baud) voor seriele data transmissie Serial.begin (9600); // Initialiseer de ledPin variabelen als output pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); pinMode (ledPin3, OUTPUT); pinMode (ledPin4, OUTPUT); pinMode (ledPin5, OUTPUT); // initialiseer alle pushbuttons als input: pinMode (mainButton, INPUT); pinMode (buttonPin1, INPUT); pinMode (buttonPin2, INPUT); pinMode (buttonPin3, INPUT); pinMode (buttonPin4, INPUT); pinMode (buttonPin5, INPUT); পিনমোড (পটপিন, ইনপুট); পিনমোড (লাইটসেন্সর, ইনপুট); }

শূন্য functie

Na de setup () functie volgt de loop () functie, de instructies die hierin staan gaan herhaald uitgevoerd worden।

void loop () {// lees de staat van de pushbuttons uit (ingedrukt of niet) mainButtonState = digitalRead (mainButton); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); buttonState3 = digitalRead (buttonPin3); buttonState4 = digitalRead (buttonPin4); buttonState5 = digitalRead (buttonPin5);

// een অ্যারে মধ্যে alle pushbutton statusen

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

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

potValue = analogRead (potPin); lightValue = analogRead (lightSensor);

// ঘোষক een array mainStates en geef die de standaard waarden 0 in।

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

// ডি অ্যারে aantalKnoppen উপর লুপ

জন্য (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); // initialiseer alle knopPinnen als input digitalRead (knopPinnen ); // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is, print knopnamen, alle buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ); সিরিয়াল.প্রিন্ট (","); Serial.println (buttonStates ); }}

ধাপ 4: প্রোটোটাইপ Uittesten

Nadat het prototype gebouwd is volgens ons model en de code geschreven is in Processing, het tijd om het prototype uit te testen। Op de video is te zien dat alle knoppen een reactie geven op de bijhorende ledjes en dat ook combinaties van knoppen mogelijk zijn।

ডি টুইড ভিডিও তে টি জিয়েন হোয়ে ওঞ্জ ট্রেমোলো ওয়ার্ক্ট এ্যান ডি হ্যান্ড ভ্যান ইয়েন পোটেন্টিওমিটার ইন ডি গিটার এন হোয়ে ডি ওয়ার্ডেস ওয়ার্ডেন ইউটিজেলজেন ইন প্রসেসিং।

ধাপ 5: Behuizing "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden

Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing
Behuizing

Als de code correct werkte op het prototype zijn we begonnen met het "ontmantelen" van onze Guitar Hero-gitaar। We hebben de gitaar opengemaakt met een schroevendraaier en bekeken welke originele ingredientsen we eventueel nog zouden kunnen hergebruiken voor onze controller। Uiteindelijk hebben we onze eigen pushbuttons in de bestaande buttons gekregen (zie volgende stap)। We hebben de tremolo ook gebruikt voor ons eindproduct en voor onze hoofdbutton (initiële button om als een combinatie af te spelen) hebben we ook de originele twee buttons gebruikt (zie vierde foto)। De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat alle knoppen correct werkten।

ধাপ 6: ওয়ার্কিং অরিজিনেল বাটন + ড্রেমেলেন

ওয়ার্কিং অরিজিনেল বাটন + ড্রেমেলেন
ওয়ার্কিং অরিজিনেল বাটন + ড্রেমেলেন

Op de bijhorende video 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 বাটন 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

Omdat we niet meer met een breadboard werken moeten de draden gesoldeerd worden om zo de verschillende ingredientsen met elkaar te verbinden। Nadat dit gebeurd is kunnen we de buttons vastlijmen zoals te zien is op de foto's। Eens dit gebeurd is kunnen we doorgaan naar de volgende stap।

ধাপ 8: ডি বেহুইজিংয়ে প্লাটস মাকেন

ডি বেহুইজিংয়ে প্লেটস মাকেন
ডি বেহুইজিংয়ে প্লেটস মাকেন
ডি বেহুইজিংয়ে প্লেটস মাকেন
ডি বেহুইজিংয়ে প্লেটস মাকেন
ডি বেহুইজিংয়ে প্লেটস মাকেন
ডি বেহুইজিংয়ে প্লেটস মাকেন

Omdat dit Guitar Hero-model redelijk krap was om mee te werken hebben we extra plaats moeten maken d.m.v. dremelen। 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 in de binnenkant obstakels waren, waaronder veel buisjes om de vijzen in te bevestigen, hebben we die ook verwijderd om optimaal van de gegeven ruimte gebruik te kunnen maken। Op de vierde en vijfde foto is te zien dat we in de Achterkant van de gitaar een doorgang hebben gecreëerd voor de draden die naar de buttons gan omdat de gitaar anders niet meer te sluiten was। En op de laatste foto is te zien dat we de draden die rechtstreeks verbonden worden met de Arduino door een gat in 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

ওম অল কম্পোনেন্টেন মেট এলকার তের ভারবিন্ডেন হেববেন উই গেব্রুক জেমাক্ট ভ্যান ইয়েন প্রোটোবোর্ড। এটা হল een bordje dat eigenlijk op net dezelfde manier werkt als een breadbord, maar dan betrouwbaarder en effiënter। We hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde foto। Dit bord is het centrale punt van waaruit al onze verbindingen vertrekken en samenkomen (zie foto 2)।

ধাপ 10: Verstevigen

ভারস্টেভিজেন
ভারস্টেভিজেন

Als ফিনিশিং টাচ হল het verstandig om de losse delen te verstevigen voor extra stabiliteit। Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de বাটন verstevigen met stukjes karton।

ধাপ 11: কোড Voor Het Communiceren Met Reaper

কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper
কোড Voor Het Communiceren Met Reaper

Deze কোড twee delen এ opgedeeld, het eerste deel de arduino IDE (interactive development enviroment) geschreven। Die code wordt geüpload naar arduino zelf en dient om alle waarden van de sensors van de midi controller uit te lezen en door te sturen naar processing।

প্রক্রিয়াকরণ হচ্ছে এককভাবে। Deze কোড dient om alles wat arduino doorstuurt te ontvangen en door te sturen naar Reaper।

আরডুইনো

/* এই কোডটি সিরিয়ালের মাধ্যমে প্রক্রিয়াকরণের সাথে যোগাযোগ করার জন্য একটি মৌলিক স্কেচ।

এটি একটি ব্লুপ্রিন্ট যেখানে আপনি আপনার নিজের কোড রাখতে পারেন

আপনার নিজের বোতাম, পোটেন্টিওমিটার বা সেন্সরের জন্য নির্দিষ্ট।

আমাদের সাথে যোগাযোগ আছে কিনা তা নিশ্চিত করার জন্য এটি একটি হ্যান্ডশেক আছে

এবং যে বিন্যাসে আমরা যোগাযোগ করছি তা ঠিক করা হয়েছে

বার্তাটি একইভাবে তৈরি করা গুরুত্বপূর্ণ, যাতে প্রসেসিং জানে কিভাবে এটি পুনonনির্মাণ করতে হবে এবং আমাদের DAW- এ সঠিক OSC- বার্তা পাঠাতে হবে

ওয়ার্ক কলেজ AV&IT এর জন্য তৈরি

অক্টোবর 2017

*

/ বড হার

const long baudRate = 115200;

// পিন থেকে পোল পর্যন্ত MS মধ্যে অপেক্ষা করার সময়

const int loopPauseTime = 200; // মিলি সেকেন্ড

// সিরিয়ালে পাঠানো বার্তার জন্য শুরু এবং শেষের মান

const স্ট্রিং startString = "*", endString = "#";

const char contactCharacter = '|';

// পিন আইডি

// অন্যান্য গ্লোবাল ভেরিয়েবল

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; // পিন ভুর ট্রেমোলো

// প্রসেসিং স্কেচের সাথে যোগাযোগ স্থাপনের জন্য আমাদের এই ফাংশনটি দরকার

// এটি এখানে অকার্যকর installContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter); // একটি চর পাঠান এবং একটি প্রতিক্রিয়ার জন্য অপেক্ষা করুন… বিলম্ব (loopPauseTime); } সিরিয়াল.রিড (); }

অকার্যকর সেটআপ() {

// সব পিনের জন্য pinModes সেট করুন (int i = 0; i <aantalKnoppen; i ++) {pinMode (knopPinnen , INPUT); } pinMode (mainButton, INPUT); // অস্বস্তি যদি আপনি 5V এর পরিবর্তে 3V তে কাজ করে এমন সেন্সর ব্যবহার করেন // তাহলে আপনাকে 'ext' পিনটি 3.3V এর সাথে সংযুক্ত করতে হবে // analogReference (EXTERNAL);

// সিরিয়াল কমগুলি আরম্ভ করুন

Serial.begin (baudRate); যখন (! সিরিয়াল); // হ্যান্ডশেকের জন্য অপেক্ষা করুন installContact (); }

অকার্যকর লুপ () {

// ধাপ 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 = map (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 (buttonStates ); যদি (i <aantalKnoppen - 1) {Serial.print (","); }} অন্য {buttonStates = 0; Serial.print (namenKnoppen ); সিরিয়াল.প্রিন্ট (","); Serial.print (buttonStates ); যদি (i <aantalKnoppen - 1) {Serial.print (","); }}} সিরিয়াল.প্রিন্ট (","); Serial.print ("tremolo"); সিরিয়াল.প্রিন্ট (","); Serial.print (মানচিত্র (potValue, 0, 1023, 0, 100)); // মেসেজ সিরিয়াল.প্রিন্টের শেষ লিখুন (endString);

// কিসুক্ষণের জন্য অপেক্ষা কর..

বিলম্ব (loopPauseTime); }

প্রক্রিয়াকরণ

অস্বীকৃতি: নিট অ্যাল কোড ভ্যান ডি প্রসেসিং স্কেচ স্ট্যাট হায়ার গেসক্র্যাভেন, ভুর ডি ভোলিডিজ কোড জী হেট পাশে: প্রসেসিং সাউন্ড কন্ট্রোল_হ্যান্ডআউট_ভি 6_1.পিডি বিজলগে

De volgende instructies moeten aangepast worden (indien nodig):

// Baudrate moet hetzelfde zijn zoals in de arduino sketch

চূড়ান্ত int baudRate = 115200;

// জিওক নর হিট আইপি অ্যাড্রেস রিপারে (বিজলেজে জী স্ক্রিনশট)

// প্রক্রিয়াজাতকরণ

// চূড়ান্ত স্ট্রিং remoteIP = "192.168.1.43"; // যেমন। "127.0.0.1";

চূড়ান্ত স্ট্রিং রিমোট আইপি = "10.3.209.60";

// সেন্ডপোর্টের নোট নিন এবং এটি রিপারে পূরণ করুন।

// এই পোর্ট প্রসেসিং পাঠায় এবং Reaper শোনে।

চূড়ান্ত int listenPort = 12000, sendPort = 12000;

// এখানে শোনার পোর্টটি সক্রিয়ভাবে ডিবাগ করা।

// পোর্ট নামগুলিও ডিবাগ করার জন্য এখানে রয়েছে।

// চূড়ান্ত স্ট্রিং portName = "/dev/ttyACM0";

চূড়ান্ত স্ট্রিং পোর্ট নাম = "COM5"; // "/dev/ttyUSB0";

///////////////////// ব্যবহারকারী প্যারামিটারের সমাপ্তি /////////////////////////// ////

আমদানি প্রক্রিয়াকরণ সিরিয়াল।*;

আমদানি java.util।*;

আমদানি oscP5।*;

আমদানি netP5।*;

OscP5 oscP5;

NetAddress myRemoteLocation;

সিরিয়াল commsPort; // সিরিয়াল পোর্ট

বুলিয়ান বার্তা আগমন = মিথ্যা;

স্ট্রিং ইনকামিং = "", IncomingOSCMessage = "";

চূড়ান্ত চর startChar = '*', endChar = '#'; চূড়ান্ত চর পরিচিতি = '|';

// নিশ্চিত করার জন্য যে আমরা শুধুমাত্র প্যারামিটার (মান) পাঠাই যা পরিবর্তন করে

// এই বৈশ্বিক বৈচিত্র্যগুলি এখানে সন্ধান করা হয়েছে কিন্তু এখানে // আরম্ভ করা উচিত নয়! হ্যাশম্যাপ পুরাতন প্যারামস, নতুন প্যারামস, টু সেন্ডপ্যারামস;

// আমাদের প্রতিটি কমাতে বার্তাটি বিভক্ত করতে হবে

void processIncoming () {String resVec = incoming.split (","); // আমরা নাম+মান জোড়া পাই // তাই প্রতিটি নামের জন্য (+2)… চেষ্টা করুন {for (int i = 0; i <resVec.length; i+= 2) {float value = float.parseFloat (resVec [i+ 1]); // তাদের নতুন হ্যাশটেবল newParams.put (resVec , মান) এ রাখুন; }} // যদি কোন ত্রুটি ঘটে, আসুন আমরা এটি প্রদর্শন করি এবং প্রস্থান করি। catch (Exception ex) {println ("ব্যতিক্রম বার্তা:" + ex); printArray (resVec); প্রস্থান (); }}

// আমাদের বার্তাগুলি ফিল্টার করার জন্য

/ * আমরা নিশ্চিত করি যে শুধুমাত্র একটি OSC- আউট বার্তা আছে যখন * ইনপুট বার্তা (সিরিয়াল) পরিবর্তিত হয় * অর্থাৎ: যদি আমরা বোতামটি চালু/ধাক্কা দিই এবং এটি মান পরিবর্তন করে। * তাই আমরা ইনকামিং মানগুলিকে ফিল্টার করে ফেলি যা আসলে পরিবর্তিত হয় * নোট: আমরা জাম্পিং মানগুলি এড়িয়ে যাব না * যেমন অ্যাকসিলরোমিটার বা দূরত্ব সেন্সর থেকে আসে * আপনাকে Arduino */ void filterParams () {toSendParams = নতুন হ্যাশ মানচিত্র(); জন্য (স্ট্রিং কী: newParams.keySet ()) {// যদি চাবি ইতিমধ্যেই উপস্থিত থাকে যদি (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)); }} অন্যথায় {// কী পুরাতন প্যারামে নেই, তাই এটি রাখুন! toSendParams.put (কী, newParams.get (কী)); } oldParams.put (কী, newParams.get (কী)); }}

অকার্যকর makeOSC () {

জন্য (স্ট্রিং কী: toSendParams.keySet ()) {OscMessage myMessage = নতুন OscMessage ("/"+ কী); myMessage.add (toSendParams.get (কী)); / * বার্তা পাঠান */ oscP5.send (myMessage, myRemoteLocation); }}

অকার্যকর অনুবাদ মেসেজ () {

processIncoming (); filterParams (); makeOSC (); } // যখন আমরা উইন্ডোতে অকার্যকর ShowIncoming () {// ইনকামিং মেসেজ দেখতে চাই, যেমন হ্যাশম্যাপ টেক্সটে সেট করা আছে ("Arduino থেকে ইনকামিং", 20, 20); int y = 20; জন্য (স্ট্রিং কী: newParams.keySet ()) {y = y+20; পাঠ্য (কী, 20, y); পাঠ্য (newParams.get (কী), 300, y); }}

অকার্যকর ShowOsc () {

পাঠ্য (IncomingOSCMessage, 300, 200); IncomingOSCMessage = ""; }

অকার্যকর সেটআপ() {

আকার (1000, 800); // স্টেজ সাইজ ফিল (255); পটভূমি (0); oldParams = নতুন হ্যাশম্যাপ (); newParams = নতুন হ্যাশম্যাপ (); // printArray (Serial.list ()); commsPort = নতুন সিরিয়াল (এই, portName, baudRate);

/ * oscP5 শুরু করুন, আগত বার্তাগুলির জন্য শুনুন */

oscP5 = নতুন OscP5 (এই, ListenPort);

/* myRemoteLocation হল একটি NetAddress। একটি NetAddress 2 প্যারামিটার নেয়, * একটি আইপি ঠিকানা এবং একটি পোর্ট নম্বর।myRemoteLocation অন্য কম্পিউটার, ডিভাইস, * অ্যাপ্লিকেশনে osc প্যাকেট পাঠানোর সময় * oscP5.send () এ প্যারামিটার হিসেবে ব্যবহৃত হয়। ব্যবহার নীচে দেখুন। পরীক্ষার উদ্দেশ্যে শোনার পোর্ট * এবং দূরবর্তী অবস্থানের ঠিকানার পোর্ট একই, তাই আপনি * এই স্কেচে বার্তা পাঠাবেন। */ myRemoteLocation = নতুন NetAddress (remoteIP, sendPort); }

অকার্যকর ড্র () {

যদি (বার্তা আগমন) {পটভূমি (0); অনুবাদ মেসেজ (); ShowIncoming (); বার্তা আগমন = মিথ্যা; } showOsc (); }

void serialEvent (Serial commsPort) {

// সিরিয়াল পোর্ট থেকে একটি বাইট পড়ুন: char inChar = commsPort.readChar (); সুইচ (ইনচার) {ক্ষেত্রে contactCharacter: commsPort.write (contactCharacter); // আরো println জন্য জিজ্ঞাসা ("শুরু…"); বিরতি; কেস স্টার্টচার: ইনকামিং = ""; বিরতি; case endChar: messageArrived = true; // println ("msg এর শেষ"); বিরতি; ডিফল্ট: ইনকামিং += ইনচার; বিরতি; }}

/* আগত osc বার্তা oscEvent পদ্ধতিতে ফরওয়ার্ড করা হয়। */

অকার্যকর oscEvent (OscMessage theOscMessage) {float value = theOscMessage.get (0).floatValue (); // 1 ম osc যুক্তি পান

IncomingOSCMessage += "\ n" +

String.format ("### একটি osc বার্তা পেয়েছে:" + "addrpattern:" + theOscMessage.addrPattern () + ": %f", মান); println (IncomingOSCMessage); }

ধাপ 12: কন্ট্রোলার Uittesten

Nu alles is aangesloten, alle code is geschreven en alles is gedubbelcheckt is 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!

প্রস্তাবিত: