Hallo liebe Gemeinde,
ich habe ein Problem mehrere Werte über Bluetooth an einen Arduino zu senden.
Eventuell hat ja jemand von euch einen Lösungsansatz.
Mit einer App sollen die Werte eines Joysticks und eines Sliders sowie weitere Befehle per Bluetooth an einen Arduino gesendet werden. Ziel ist es später einen Hexapod anzusteuern.
Leider fällt beim auslesen der Werte auf, dass die gesendeten Werte oft an falscher Stelle stehen.
Zum Erkennen, das die Datenreihe beginnt, wird einmal der Wert 255 gesendet, der darauffolgende Wert ist dann der x z.B. 65, dann y z.B. 65, dann z z.B. 127 und dann control z.B. 24.
Die Verbindung zum Bluetoothmodul HC05 wird aufgabaut und ist Stabil. Daten werden auch zügig übermittelt. Nur geraten eben die Werte teilweise durcheinander.
Ausgabe am Seriellen Monitor:
255, x65, y65, z127, control24
255, x65, y127, z127, control24
255, x65, y127, z24, control24
255, x65, y127, z24, control65
255, x65, y127, z24, control65
int dataIn[5] {0,0,0,0,0};
int in_byte = 0;
int array_index = 0;
int joystick_x_ble = 0; // Joystick x Position
int joystick_y_ble = 0; // Joystick y Position
int joystick_z_ble = 0; // Joystick/ Slider z Position
int control_ble = 0; // Control Nummer
void setup() {
Serial.begin(9600); // Serieller Monitor
Serial1.begin(9600); // Bluetooth-Modul HC05
}
void loop() {
if(Serial1.available()>0){ // Wenn Daten vorhanden
in_byte = Serial1.read(); // Daten lesen
if (in_byte == (255)){ // 255 Anfang der Datenreihe
array_index = 0;
}
dataIn[array_index]=in_byte;
array_index = array_index +1;
}
Serial.print(dataIn[0]);
Serial.print(", x");
Serial.print(dataIn[1]);
Serial.print(", y");
Serial.print(dataIn[2]);
Serial.print(", z");
Serial.print(dataIn[3]);
Serial.print(", control");
Serial.println(dataIn[4]);
}
Könnte mir vorstellen, dass ich eine While-Schleife beim Auslesen einbinden muss, bis jede Stelle eingelesen ist. Habe es mal versucht mit:
if (in_byte == (255)){ // 255 Anfang der Datenreihe
array_index = 0;
if (array_index == 0){
while(array_index <= 4){
in_byte = Serial1.read();
dataIn[array_index]=in_byte;
array_index = array_index +1;
}
}
}
255, x65, y-1, z-1, control-1
255, x65, y-1, z-1, control-1
255, x65, y65, z127, control-1
255, x65, y65, z127, control-1
Das ist das Ergebnis....
Verwendet wird ein Arduino Mega. Auch mit einem Uno habe ich es getestet.
Hat jemand von euch Erfahrungen dabei, mehrere Werte zu Empfangen und diese auch an richtiger Stelle einzulesen?
Wäre für jeden Tipp dankbar.