Showing results for 
Search instead for 
Did you mean: 

Decoding hexadecimal data from Bluetooth accelerometer



I am working on a project to make the LPMS-B accelerometer, gyro and magnetometer livestream in LabVIEW.

I managed to connect the sensor to LabVIEW and read out hexadecimal data. 

I have a table to decode the hexadecimal data, but I am a little stuck with some problems. 


As you can see in the attached files, '3A' is the packed start and '0A' the end, everything in between is measurement data. 

But when I search for those values and put the string in an array (see attachment 'array.png') the length isn't constant. 

There is a length that is most common, and it has a length of 206 characters. But when I look in the table, there should only be 134 characters in one line.

What am I doing wrong?


Here is a link to the guide:


I hope you understand my problem and you can help me about how I should take it further from here.


Thank you!

Download All
0 Kudos
Message 1 of 4

It all seems wrong (Sorry, I haven't done any Bluetooth, so my comments are more general).


  • Your lower feedback node is globally initialized, so the array will grow without bounds eventually.
  • What are the settings for "bytes to read" and "mode". Since you use controls instead of diagram constants, we don't know what setting you are using).
  • You run the upper loop with every iteration of the outer loop. The upper loop stops when in encounters a zero, which can happen at any time.
  • there is a "=0" primitive.
  • What's the point of the value property node? Seems inefficient.
  • ...

Aren't there some good examples that do exactly what you want to do?

Message 2 of 4

Thank you for your reply.


The bytes to read are 999 and mode is standard. I am not sure if this is correct, but it is working right now. 

For the match pattern function, I see I made a mistake. The upper loop has to stop, when the match pattern function will not find any matching patterns anymore. In that case, it will return -1. I made the mistake, by comparing the wrong output of the match pattern function to 0. I will correct that.

I see that the property node is not necessary, I will fix that.


What exactly do you mean with the =0 primitive? 


What I want to do, is livestream the accelerometer in LabVIEW and visualize it, and eventually be able to analyze the data. 

Please have a look at the attached images, maybe that makes it more clear what I want to do.


In the selected section 1, I'm reading in the accelerometer, but the data that comes out of that is very scrambled (outcome.png)

In section 2 I'm converting that to hexadecimal data, which I should beable to decode with the table I have (but that is where I am stuck now)

In section 3, I am selecting everythin that starts with 3A and ends with 0A, the start and end codes according to the manual. Everything in between should be data.

But the problem now is, that the length of those lines that start with 3A and end with 0A are not always the same length. According to the table in the manual, I would expect lengths of 134 characters, which would make it easier, because then I would know which hexadecimal data belongs to which function of the sensor.


I hope that I explained it correctly, but if you have any more questions, please let me know


Download All
0 Kudos
Message 3 of 4

What happens if the data string also contains the start value 0x 3A ??  Record some raw data and check your seperation routine.


And since the data length AND a check sum are included,  why not use them?

(since they mentioned MODBUS, maybe have a look at the MODBUS driver as a startpoint)


Have you asked the vendor for a LabVIEW driver ? Maybe they already have one 😉


Greetings from Germany

LV since v3.1

“ground” is a convenient fantasy

'˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ'

0 Kudos
Message 4 of 4