Go Down

Topic: fehler bei datenübertragung durch midifunktion (Read 582 times) previous topic - next topic

amelie

Liebe alle,

also ich bin gerade dabei handschuhe zu machen die durch übermittelte Daten eines beschleunigungssensors und drucksensoren filter ansteuern können um einen durchlaufenden musikloop durch gesten zu modifizieren.

ich arbeite mit cubase und arduino wobei der cubase part mein partner macht. Ich hab meinen Sketch mal soweit reduziert dass es vielleicht einfacher ist zu verstehen was mein problem ist.

ich hab noch nicht viel mit midi gemacht kenne also auch die Txmidi3 finktion nicht wirklich vielleicht ist sie auch der grund für mein problem und mein problem gar kein wirkliches.

habe bemerkt das die sensor daten einwandfrei angezeigt werden. Sobald ich allerdings oben genannte funktion reinnehme krieg ich immer seltsame Buchstaben und symbole vor dem ersten wert angezeit.

hier ist der sketch:


int
   SensPin4 = 4,// select the input pin for sensor
   SensPin5 = 5,
   
   

 
   SensValue4,
   SensValue5;
   



void setup()
{
 
 Serial.begin(9600);   //  Set MIDI baud rate:
}




void loop()
{
 
   
   SensValue4 = analogRead(SensPin4)/8;
   Serial.print(SensValue4);
   Serial.print("\t");
   
   
   SensValue5 = analogRead(SensPin5)/8;
   Serial.print(SensValue5);
   Serial.println();
   
 
                                                                                   

   //TxMidi3(0xB0,20,SensValue4);  // wenn diese zeilen nicht mehr auskommentiert sind krieg ich die komischen buchstaben und symbole mit rein...
   //TxMidi3(0xB0,21,SensValue5);  
   



   delay(300);
   
 
 
}



void TxMidi3(int By1, int By2, int By3)
{
 Serial.print(By1, BYTE);
 Serial.print(By2, BYTE);
 Serial.print(By3, BYTE);
}


Gut, also vielleicht kann mir ja jemand helfen. Das würde unglaublich freuen!

Vielen Dank schon einmal!

pi

Hallo amelie,

das sieht alles sehr seltsam aus.
Zunächst mal setzt du die Geschwindigkeit der seriellen Schnittstelle auf 9600 Bps. Midi wird üblicherweise mit 31250 Bps betrieben (siehe hier).
Dann verwendest du innerhalb von loop() die Funktion "Serial.print(val);", um deine Werte zu übertragen. Bei diesem Aufruf wird die Zahl (val) zunächst in einen String umgewandelt. Aus der Zahl 64 wird so z.B. der String "64", also eine Folge von zwei Zeichen (Bytes). Dieser String wird dann über die Serielle übertragen.
In deiner TxMidi3-Routine verwendest du allerdings "Serial.println(val, BYTE);". Hierbei wird (val) nicht in einen String umgewandelt, sondern als ASCII-Wert (zwischen 0 und 255) betrachtet und übertragen. Aus der Zahl 64 wird so das Zeichen "@". Die verschiedenen Funktionen von Serial.println() findest du hier, die ASCII-Zeichentabelle hier.

Da bei MIDI normalerweise Geräte angesteuert werden ist die normale Datenübermittlung nicht im Klartext (also mit Serial.print(val); ), sondern mit einem Binärformat (Serial.print(val, BYTE); ) zu machen. Sowas ist dann aber nicht mehr für Menschen lesbar.

Gruß
pi

amelie

hej pi,

danke für deine Antwort... ja ich glaub ich hab das auch etwas verwirrend gepostet. Wenn cubase angeschlossen ist dann haben wir auch die korrekte baud rate. Die 9600 hatte ich nur eingestellt um die werte zu kontrollieren bzw. korrekt mappen zu können (also von 0 - 127) deswegen auch serail.print(val). Vermutlich ist es einfach die kombination... beider print befehle die das chaos verursacht haben.

Viele Grüsse und danke
Amelie

Go Up