جدول المحتويات:
- الخطوة 1: مكون Verzamelen
- الخطوة 2: النموذج الأولي Bouwen
- الخطوة 3: نموذج الكود
- الخطوة 4: النموذج الأولي Uittesten
- الخطوة 5: Behuizing "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden
- الخطوة 6: أزرار Werking Originele + Dremelen
- الخطوة 7: Bedrading Solderen + Buttons Vastlijmen
- الخطوة 8: Plaats Maken in De Behuizing
- الخطوة 9: وضع بروتوبورد Aansluiten Op
- الخطوة 10: Verstevigen
- الخطوة 11: كود Voor Het Communiceren Met Reaper
- الخطوة 12: تحكم Uittesten
فيديو: مشروع Guitar Hero Arduino: 12 خطوة (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
Wij zijn Maarten Vrebos و Justin Cavanas و Wannes Stroobandt ونحن ندرس الوسائط المتعددة وتكنولوجيا الاتصالات. Voor een groepsproject for het vak السمعي البصري ومبادئ تكنولوجيا المعلومات. كان Het يتأقلم مع om de bestaande knoppen op de gitaar intern te vervangen. وحدة تحكم Onze zal widegehouden en bespeeld worden als een normale gitaar. Aangezien نحن iets hebben gehackt hebben نحن نوفر المزيد من المواد في Moeten verwerken.
في دي أفبلدينغ ، يمكن أن يكون لديك أوراق على الورق زين فان هوه هيت المنتج الإلكتروني زو موتين أوويتزين مع دارناست إي إن فوتو فان دي جيتار دي أيضا وراء طلب الزنجبرويكت.
Wij hebben ons for 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 مقاومات 1 كيلو أوم
- 1 gele LED 1
- Blauwe LED
- 1 اردوينو أونو R3
- 1 أخضر LED
- 2 ركب المصابيح
- 1 شويفشكيلار
- 1 لوح توصيل
- 1 مقياس الجهد
- 1 بروتوبورد
- 1 جيتار هيرو جيتار
- Voldoende بيدرينج
- المواد om te solderen / dremelen /
- شرويفندراير
الخطوة 1: مكون Verzamelen
النموذج الأولي لـ Voor ons (op breadboard) hebben we volgende componenten gebruikt:
6 أزرار انضغاطية
7 مقاومات 1 كيلو أوم
1 أصفر ليد
1 الصمام الأزرق
1 اردوينو أونو R3
1 مصباح LED أخضر
2 الصمام الأحمر
1 شويفشكيلار
1 اللوح
1 مقياس الجهد
الخطوة 2: النموذج الأولي Bouwen
Om ons النموذج الأولي te bouwen hebben نحن جميعًا مكونين في لوحة التجارب ، لوح التجارب deze dan als testobject zodat ، نحن نلتقي في تقديم خدمة werk moeten gaan. Dit النموذج الأولي hebben we dan ook gedigitaliseerd عبر tinkercad.com، op deze manier hadden we een 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 on meerdere "snaren" moet worden ingedrukt om een audief effect te krijgen. مصابيح LED-lampjes dienen gewoon als visuele control om er zeker van te zijn dat de interactionie succesvol werkt.
الخطوة 3: نموذج الكود
جلوبال فارابابلين
في هذه العملية ، تم إنشاء رمز تهيئة je globale variabelen voor de pin van arduino uno waar alle pushbuttons me verbonden zijn.
// zet pin number 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 ؛ // nummer van pushbutton2const int buttonPin3 = 4 ؛ // nummer van pushbutton3const int buttonPin4 = 5 ؛ // nummer van pushbutton4const int buttonPin5 = 6 ؛ // nummer van pushbutton5
صفائف Hierna worden er twee aangemaakt for 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 pin van de 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 'state 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 ؛
اقامة
نو فولجت دي باطل وظيفة الإعداد. Deze هو نوع باطل (geeft geen waarde terug) en de التعليمات hierin worden maar 1 keer uitgevoerd.
Bij elke functie هو تعليق geschreven wat er concreet gedaan wordt. إضافي uitleg over wat een specifieke functie concreet doet is te vinden in de arduino reference
إعداد باطل () {// معدل البيانات في الثانية (الباود) لنقل البيانات المسلسلة Serial.begin (9600) ؛ // Initialiseer de ledPin variabelen als الإخراج pinMode (ledPin1 ، الإخراج) ؛ pinMode (ledPin2 ، الإخراج) ؛ pinMode (ledPin3 ، الإخراج) ؛ pinMode (ledPin4 ، الإخراج) ؛ pinMode (ledPin5 ، الإخراج) ؛ // مُبدئ جميع الأزرار الانضغاطية: pinMode (mainButton ، INPUT) ؛ pinMode (buttonPin1 ، الإدخال) ؛ pinMode (buttonPin2 ، الإدخال) ؛ pinMode (buttonPin3 ، الإدخال) ؛ pinMode (buttonPin4 ، الإدخال) ؛ pinMode (buttonPin5 ، الإدخال) ؛ pinMode (potPin ، INPUT) ؛ pinMode (مستشعر الضوء ، الإدخال) ؛ }
وظيفة باطلة
Na de setup () functie volgt de loop () functie، de التعليمية هيرين ستان جان هيرهاالد أويتجفيرد وردن.
الحلقة الفارغة () {// 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) ،
// all pushbutton statusen in een array
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} ؛
// loop over de array aantalKnoppen
لـ (int i = 0؛ i <aantalKnoppen؛ i ++) {pinMode (knopPinnen ، INPUT) ؛ // initialiseer all knopPinnen als input digitalRead (knopPinnen ) ؛ // lees de waarde van alle knoppinnen uit // indien de mainswitch (snaar) ingedrukt is، print alle knopnamen، alle buttonstates if (mainButtonState == HIGH) {Serial.print (namenKnoppen ) ؛ Serial.print ("،") ؛ Serial.println (buttonStates ) ؛ }}
الخطوة 4: النموذج الأولي Uittesten
النموذج الأولي لـ Nadat het gebouwd هو نموذج volgens ons en de code geschreven قيد المعالجة ، هل هو نموذج أولي للاختبار. يتم عرض مقطع الفيديو هذا على أنه ليس من الضروري الرد على رد فعل geven op de bijhorende ledjes en dat ook combinaties van knoppen mogelijk zijn.
في فيديو de tweede ، يوجد مقياس الجهد الكهربائي te zien hoe onze tremolo werkt aan de van een في de gitaar en hoe de waardes worden uitgelezen in Processing.
الخطوة 5: Behuizing "ontmantelen" En Kijken Welke Componenten Gebruikt Gaan Worden
Als de code الصحيح werkte op het prototype zijn we Begonnen met het "ontmantelen" van onze Guitar Hero-gitaar. نحن hebben de gitaar opengemaakt مع een schroevendraaier en bekeken welke original componenten we eventueel nog zouden kunnen hergebruiken for onze controller. Uiteindelijk hebben قمنا بتثبيت أزرار الضغط eigen في أزرار de bestaande gekregen (zie volgende stap). نحن نتعامل مع tremolo من gebruikt voor ons eindproduct en voor onze hoofdbutton (زر البداية om als een combinatie af te spelen) hebben we ook de originele twee Button gebruikt (zie vierde foto). De LEDjes zullen verdwijnen (deze waren enkel ter indicatie zodat we zagen dat all knoppen right werkten.
الخطوة 6: أزرار Werking Originele + Dremelen
فيديو Op de bijhorende هو عبارة عن فيديو أصلي تم إنشاءه في وقت واحد.
أزرار Om onze eigen te verwerken in de originele knoppen heben we de binnenkant van de originelen er grotendeels uitgehaald zoals te zien is op de foto.
الخطوة 7: Bedrading Solderen + Buttons Vastlijmen
Omdat we niet meer met een breadboard werken moeten de draden gesoldeerd worden om zo de verschillende componenten met elkaar te verbinden. Nadat dit gebeurd هي kunnen نحن نضع أزرارًا واسعة النطاق zoals te zien هي op de foto's. Eens dit gebeurd هو kunnen we doorgaan naar de volgende stap.
الخطوة 8: Plaats Maken in De Behuizing
Omdat dit Guitar Hero-model redelijk krap was om mee te werken heben 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 in de binnenkant oblakels 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 heben gecreëerd voor de draden die naar de keys gaan 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
Om all elementen met 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 betrouwbaarder en efficiënter. نحن hebben de bedrading aan het bordje gesoldeerd zoals te zien is op de derde foto. Dit bord هو هيت سنترال بونت فان وارويت ألونزي فيربيدينجين أون سامينكومن (زي فوتو 2).
الخطوة 10: Verstevigen
إن اللمسة الأخيرة هي أنها تحقق من om de losse delen te verstevigen للحصول على استقرار إضافي. Op deze foto is te zien hoe we het deel dat we er hebben uitgehaald d.m.v. dremelen achteraan de أزرار verstevigen التقى stukjes karton.
الخطوة 11: كود Voor Het Communiceren Met Reaper
يتم تشغيل كود Deze في Twee delen ، وهو موجود في بيئة التطوير التفاعلية (بيئة التطوير التفاعلية). يموت كود wordt geüpload naar arduino zelf en dient om all waarden van de sensors van de midi controller uit te lezen en door te sturen naar Processing.
المعالجة هي تويد جديلة. Deze code dient om alles wat arduino doorstuurt te ontvangen en door te sturen naar Reaper.
اردوينو
/ * هذا الرمز هو رسم تخطيطي أساسي للتواصل مع المعالجة من خلال المسلسل.
إنه مخطط يمكنك من خلاله وضع الكود الخاص بك
المحددة للأزرار الخاصة بك أو مقاييس الجهد أو أجهزة الاستشعار.
هناك مصافحة للتأكد من اتصالنا
والشكل الذي نتواصل به قد تقرر
من المهم بناء الرسالة بنفس الطريقة ،
حتى تعرف المعالجة كيفية تفكيكها وإرسال رسائل OSC الصحيحة إلى منصة العمل الصوتية الرقمية الخاصة بنا
صنع لـ werkcollege AV&IT
أكتوبر 2017
*
/ معدل الباود
معدل البث بالباود الطويل = 115200 ؛
// وقت الانتظار بالمللي ثانية بين الاستطلاعات إلى الدبابيس
const int loopPauseTime = 200 ؛ // ملي ثانية
// قيم البداية والنهاية للرسالة المرسلة في المسلسل
const String 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 ؛ // pin voor tremolo
// نحن بحاجة إلى هذه الوظيفة لإنشاء اتصال برسم المعالجة
// احتفظ بها هنا باطلة createContact () {while (Serial.available () <= 0) {Serial.print (contactCharacter)؛ // أرسل حرفًا وانتظر الرد … تأخير (loopPauseTime) ؛ } Serial.read () ؛ }
الإعداد باطل() {
// اضبط pinModes لجميع المسامير لـ (int i = 0 ؛ i <aantalKnoppen ؛ i ++) {pinMode (knopPinnen ، INPUT) ؛ } pinMode (mainButton، INPUT) ؛ // uncomment إذا كنت تستخدم مستشعرات تعمل على 3 فولت بدلاً من 5 فولت // ، فسيتعين عليك توصيل دبوس 'ext' بـ 3.3 فولت وكذلك // analogReference (خارجي) ؛
// تهيئة الاتصالات التسلسلية
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 = 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 ("،") ؛ Serial.print (buttonStates ) ؛ إذا (i <aantalKnoppen - 1) {Serial.print ("،") ؛ }} آخر {buttonStates = 0 ؛ Serial.print (namenKnoppen ) ؛ Serial.print ("،") ؛ Serial.print (buttonStates ) ؛ إذا (i <aantalKnoppen - 1) {Serial.print ("،") ؛ }}} Serial.print ("،")؛ Serial.print ("tremolo") ؛ Serial.print ("،") ؛ Serial.print (خريطة (potValue، 0، 1023، 0، 100)) ؛ // كتابة نهاية الرسالة Serial.print (endString) ؛
// انتظر لبعض الوقت..
تأخير (loopPauseTime) ؛ }
يعالج
إخلاء المسئولية: كود Niet alle code van de Processing staat hier in geschreven، voor de volledige code zie het bestand: ProcessingSoundControl_handout_v6_1.pde in bijlage
يوجه De Volgende تعليمات إلى moeten aangepast worden (nodig indien):
// Baudrate moet hetzelfde zijn zoals in de arduino sketch
معدل الباود النهائي = 115200 ؛
// Zoek naar het IP adress in Reaper (zie screenshots in bijlage)
// معالجة stuurt حتى الآن dit andres en reaper luistert hier naar //
// final String remoteIP = "192.168.1.43" ؛ // على سبيل المثال. "127.0.0.1" ؛
السلسلة النهائية عن بعد IP = "10.3.209.60" ؛
// لاحظ الإرسال واملأه في Reaper.
// هذا هو المنفذ الذي ترسله المعالجة ويستمع Reaper إليه.
نهائي int listenPort = 12000 ،
sendPort = 12000 ؛
// إن listenPort هنا هو التصحيح النشط.
// the portNames هنا للتصحيح أيضًا.
// final String portName = "/ dev / ttyACM0" ؛
اسم منفذ السلسلة النهائية = "COM5" ؛ // "/ dev / ttyUSB0" ؛
/////////////////////// نهاية معلمات المستخدم /////////////////////////// ////
معالجة الاستيراد. تسلسلي. * ؛
استيراد java.util. * ؛
استيراد oscP5. * ؛
استيراد netP5. * ؛
OscP5 oscP5 ؛
NetAddress myRemoteLocation ؛
منفذ اتصالات تسلسلي ؛ // المنفذ التسلسلي
وصلت الرسالة المنطقية = خطأ ؛
سلسلة واردة = "" ،
IncomingOSCMessage = "" ؛
بداية شار النهائية = '*' ،
endChar = '#' ؛ نهائي حرف اتصال الحرف = '|'؛
// للتأكد من أننا نرسل المعلمات (القيم) التي تتغير فقط
// تم حذف هذه المتغيرات العالمية هنا ولكن لا ينبغي تهيئتها هنا! HashMap oldParams ، newParams ، toSendParams ؛
// نحن بحاجة إلى تقسيم الرسالة عند كل فاصلة
عملية باطلة () {String resVec = incoming.split ("،")؛ // نحصل على أزواج الاسم + القيمة // لذلك لكل اسم (+2) … جرب {لـ (int i = 0؛ i <resVec.length؛ i + = 2) {float value = Float.parseFloat (resVec [i + 1]) ؛ // ضعهم في newParams.put Hashtable الجديد (resVec ، value) ؛ }} // إذا حدث خطأ فلنقم بعرضه والخروج منه. catch (استثناء) {println ("رسالة الاستثناء:" + ex)؛ printArray (resVec) ؛ خروج()؛ }}
// لتصفية رسائلنا
/ * نتأكد من وجود رسالة OSC-out فقط عندما * تتغير رسالة الإدخال (المسلسل) * أي: إذا أدرنا / ضغطنا على الزر وقمنا بتغيير القيمة. * لذلك نقوم بتصفية القيم الواردة التي تتغير فعليًا * ملاحظة: لن نتجنب القفز على القيم * كما تأتي من على سبيل المثال مقاييس التسارع أو مستشعرات المسافة * ستحتاج إلى تسوية تلك القيم بنفسك في Arduino * / void filterParams () {toSendParams = جديد خريطة التجزئة()؛ لـ (String key: newParams.keySet ()) {// إذا كان المفتاح موجودًا بالفعل إذا (oldParams.containsKey (key)) {// key present و value not نفس الشيء ، فقم بتحديث if (! oldParams.get (مفتاح).equals (newParams.get (key))) {toSendParams.put (key، newParams.get (key)) ؛ }} else {// key غير موجود في البارامترات القديمة ، لذا ضعها! toSendParams.put (مفتاح ، newParams.get (مفتاح)) ، } oldParams.put (key، newParams.get (key)) ؛ }}
makeOSC باطل () {
لـ (مفتاح السلسلة: toSendParams.keySet ()) {OscMessage myMessage = new OscMessage ("/" + key) ؛ myMessage.add (toSendParams.get (مفتاح)) ؛ / * أرسل الرسالة * / oscP5.send (myMessage ، myRemoteLocation) ؛ }}
ترجمة باطلة () {
معالجة واردة () ؛ filterParams () ، makeOSC () ؛ } // عندما نريد الطباعة إلى نافذة باطلة ShowIncoming () {// لرؤية الرسالة الواردة ، كما هو محدد في نص HashMap ("Incoming from Arduino"، 20، 20)؛ int y = 20 ؛ لـ (مفتاح السلسلة: newParams.keySet ()) {y = y + 20 ؛ نص (مفتاح ، 20 ، ص) ؛ نص (newParams.get (مفتاح) ، 300 ، ص) ؛ }}
عرض باطل () {
نص (IncomingOSCMessage، 300، 200) ؛ IncomingOSCMessage = "" ؛ }
الإعداد باطل() {
الحجم (1000 ، 800) ؛ // ملء حجم المرحلة (255) ؛ الخلفية (0) ؛ oldParams = new HashMap () ؛ newParams = new HashMap () ؛ // printArray (Serial.list ()) ؛ commsPort = مسلسل جديد (هذا ، portName ، baudRate) ؛
/ * بدء تشغيل oscP5 ، والاستماع إلى الرسائل الواردة * /
oscP5 = OscP5 جديد (هذا ، listenPort) ؛
/ * myRemoteLocation هو NetAddress. يأخذ NetAddress معلمتين ،
* عنوان IP ورقم منفذ.يتم استخدام myRemoteLocation كمعامل في * oscP5.send () عند إرسال حزم osc إلى كمبيوتر أو جهاز أو تطبيق آخر. استخدام انظر أدناه. لأغراض الاختبار ، يكون منفذ الاستماع * ومنفذ عنوان الموقع البعيد متماثلين ، ومن ثم سترسل * الرسائل مرة أخرى إلى هذا المخطط. * / myRemoteLocation = عنوان NetAddress جديد (remoteIP، sendPort) ؛ }
رسم باطل () {
إذا (messageArrived) {خلفية (0) ؛ translateMessage () ، إظهار واردة () ؛ messageArrived = خطأ ؛ } showOsc () ؛ }
serialEvent باطلة (Serial commsPort) {
// قراءة بايت من المنفذ التسلسلي: char inChar = commsPort.readChar () ؛ التبديل (inChar) {case contactCharacter: commsPort.write (contactCharacter) ؛ // اطلب المزيد من println ("بدء …") ؛ استراحة؛ بداية الحالة: واردة = "" ؛ استراحة؛ حالة endChar: messageArrived = صحيح ؛ // println ("نهاية الرسالة") ؛ استراحة؛ الافتراضي: وارد + = inChar ؛ استراحة؛ }}
/ * يتم إعادة توجيه رسالة osc الواردة إلى طريقة oscEvent. * /
void oscEvent (OscMessage theOscMessage) {قيمة تعويم = theOscMessage.get (0).floatValue () ؛ // احصل على وسيطة osc 1st
واردة OSCMessage + = "\ n" +
String.format ("### تلقى رسالة osc:" + "addrpattern:" + theOscMessage.addrPattern () + ":٪ f"، value)؛ println (IncomingOSCMessage) ؛ }
الخطوة 12: تحكم Uittesten
نو alles هو aangesloten ، رمز all is geschreven en alles is gedubbelcheckt is het eindelijk tijd om de controller z'n werk te laten doen. تأثير كبير على جهاز التحكم عن بعد باستخدام جهاز التحكم الحقيقي في الجيتار البطل MIDI!
موصى به:
استخدام Guitar Hero Guitar للتحكم في التكبير (Windows فقط): 9 خطوات
استخدام Guitar Hero Guitar للتحكم في التكبير (Windows فقط): نظرًا لأننا في خضم جائحة عالمي ، فإن الكثير منا عالق في تنظيف المنزل والانضمام إلى الاجتماعات على Zoom. بعد فترة ، يمكن أن يصبح هذا لطيفًا ومملًا للغاية. أثناء تنظيف منزلي ، وجدت غيتارًا قديمًا من Guitar Hero تم إلقاؤه في
مشروع IEEE WORD CLOCK: 12 خطوة (بالصور)
مشروع IEEE WORD CLOCK: هذا مشروع لنادي UNO IEEE ، وهو طريقة فريدة لتمثيل الوقت. توضح Word Clock الوقت وباستخدام شريط RGB ، يمكنك الحصول على الساعة بأي لون تختاره. باستخدام إمكانات WiFi في ESP32 ، يمكن
Arc Reactor a La Smogdog ، مشروع شخصي للغاية : 13 خطوة (بالصور)
Arc Reactor a La Smogdog ، مشروع شخصي للغاية …: ما هو الشيء المشترك بيني وبين هذين الرجلين؟ إنها ليست اللحية هذه المرة! لدينا جميعًا ثقب في صدرنا ، حسنًا ، لقد ولدت أنا وليو مع Pectus Excavatum ، كان على ستارك أن يكسب :-) Pectus Excavatum هو (ابحث عنه هنا: https: // ar .wikipedia.org / wik
مشروع "Ready Maker" - التحكم في مشروع Lego Power Functions: 9 خطوات
"Ready Maker" - التحكم في مشروع "Lego Power Functions": تعلم كيفية التحكم في وظائف Lego & quot؛ Power & quot؛ المكونات مع لوحة Arduino وبناء مشروعك في & quot؛ Ready Maker & quot؛ محرر (لا يوجد كود مطلوب) للتحكم عن بعد في نموذجك
OpenChord.org V0 - بناء Guitar Hero Real Guitar Hero / Rock Band Controller: 10 خطوات
OpenChord.org V0 - قم ببناء Guitar Hero Real Guitar Hero / Rock Band Controller: كلنا نحب Guitar Hero و Rock Band. نعلم أيضًا أننا لن نتعلم أبدًا كيفية العزف على الجيتار فعليًا بلعب هذه الألعاب. ولكن ماذا لو تمكنا على الأقل من بناء وحدة تحكم Guitar Hero تتيح لنا استخدام جيتار حقيقي؟ هذا ما نحن هنا في OpenChord