Empfang von Bluetooth nur Kauderwelsch

Hallo,

ich habe mir das BJY61 Modul gekauft, welches einen MPU6050 mit Bluetooth kombiniert:

Wenn ich das richtig sehe, ist das ein HC06 BT-Modul.

Das Modul funktioniert über die Kabelverbindung mit dem Arduino einwandfrei, allerdings bekomme ich mittels HC05 keine vernünftige BT-Übertragung zustande. Verbinden kann ich mich und Daten kommen auch haufenweise an, allerdings nicht lesbar.
Ich habe vermutet, dass die Baudrate nicht stimmt, habe aber am PC über Tera Term einmal alle möglichen Raten (9600 bis 115200) durchprobiert.
Sonstige Einstellungen waren 8 Datenbits, keine parity, 1 Stopbit, Flow control None.

Der Sketch, mit dem ein Test per Kabel am Arduino funktionierte:

/*
This code is used for connecting arduino to serial mpu6050 module, and test in arduino uno R3 board.
connect map:
arduino   mpu6050 module
VCC    5v/3.3v
TX     RX<-0
TX     TX->1
GND    GND
note: 
because arduino download and mpu6050 are using the same serial port, you need to un-connect 6050 module when you want to download program to arduino.
 Created 14 Nov 2013
 by Zhaowen
 
 serial mpu6050 module can be found in the link below:
 http://item.taobao.com/item.htm?id=19785706431
 */

//#include <SoftwareSerial.h>

unsigned char Re_buf[11],counter=0;
unsigned char sign=0;
float a[3],w[3],angle[3],T;
void setup() {
  // initialize serial:
  Serial.begin(115200);
}

void loop() {
  if(sign)
  {  
     sign=0;
     if(Re_buf[0]==0x55)      //检查帧头   -- Check the header
     {  
  switch(Re_buf [1])
  {
  case 0x51:
    a[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*16;
    a[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*16;
    a[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*16;
    T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
    break;
  case 0x52:
    w[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*2000;
    w[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*2000;
    w[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*2000;
    T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
    break;
  case 0x53:
          angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180;
    angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180;
    angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180;
    T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
               /* Serial.print("a:");
                Serial.print(a[0]);Serial.print(" ");
                Serial.print(a[1]);Serial.print(" ");
                Serial.print(a[2]);Serial.print(" ");
                Serial.print("w:");
               */ 
               
               Serial.print(w[0]*100+1);Serial.print(";");
               Serial.print(w[1]*100+1);Serial.print(";");
               Serial.print(w[2]*100+1);Serial.print(";");
               Serial.println();
//                Serial.print("angle:");
/*                Serial.print(angle[0]+180);Serial.print(";");
                Serial.print(angle[1]+180);Serial.print(";");
                Serial.println(angle[2]+180);/*Serial.print(" ");*/
              /*  Serial.print("T:");
                Serial.println(T);*/
                break;
                
  } 
    }
  } 
}

void serialEvent() {
  while (Serial.available()) {
    
    //char inChar = (char)Serial.read(); Serial.print(inChar); //Output Original Data, use this code 
  
    Re_buf[counter]=(unsigned char)Serial.read();
    if(counter==0&&Re_buf[0]!=0x55) return;      //第0号数据不是帧头  -- No. 0 data is not a header            
    counter++;       
    if(counter==11)             //接收到11个数据  -- Received 11 data
    {    
       counter=0;               //重新赋值,准备下一帧数据的接收   -- Reassigned, ready to receive the next frame of data
       sign=1;
    }
      
  }
}

Hat jemand eine Idee, wie ich es schaffe, die Daten ordentlich zu empfangen?

Grüße,
Nik

Ich würde das "short" durch was längeres ersetzen, mindestens "int".

Ok, ich habe mittlerweile so viel herausgefunden, dass die Daten im Hex-Format gesendet werden, die direkte Ausgabe per Konsole konnte deshalb keinen Sinn ergeben.

Vielleicht als kurze erlkärung: der Sensor hat Pins für die direkte Verbindung mit dem Arduino. Das habe ich bisher getestet und es hat gut mit dem Sketch oben funktioniert (ist nicht meiner, kam mit dem Sensor).
Er kann aber auch per BT verbunden werden und da kam dann nur noch Blödsinn.

Jetzt möchte ich den Sketch gerne anpassen. Dabei verstehe ich noch nicht ganz die Logik:
In Re_buff werden die Werte aus dem Sensor gespeichert.
Ich verstehe nicht, wie er jetzt in die viod serialEvent() kommt, wo er offenbar die jeweiligen Werte in der Variable Re_buff speichert, wenn das doch hinter der Schleife steht.

Das serialEvent wird bei jedem empfangenen Zeichen von Serial aufgerufen. Siehe Reference|Serial.

Bei SoftwareSerial bzw. AltSoftSerial wäre zu prüfen, ob und wie dort so ein Callback eingerichtet werden kann. Oder der Puffer muß dann wie üblich per Polling gefüllt werden. Normalerweise kann man auf serialEvent getrost verzichten.

Ah verstehe. Danke, das hat mir geholfen. Jetzt klappt auch die Übertragung so wie ich es mir vorgestellt habe.