0
votes

I am sending accelerometer data via bluetooth into Matlab where I will process it and build a GUI.

I am currently working on getting the bluetooth data into Matlab. I'm using a dongle which gets data into port COM18. This is the code I'm using:

s= serial ('COM18');
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
fopen(s);

When I start from scratch (disconnect and connect bluetooth and dongle, reopen matlab etc) The port successfully opens and allows me to read data. However, if I close and then try to open, it will give me an error:

Error using serial/fopen (Line 72) Open failed: Port COM 18 is not available. Available ports: COM6, COM7, COM19. use INSTRFIND to determine if other instrument objects are connected to the requested device.

I know that my device isn't connected to anything else. So I then have to disconnect my bluetooth, dongle, and restart matlab.

Is there a more efficient way to do this?

Also, I am able to get values from my accelerometer into Matlab, but I don't know how to make them continuous. Each time 512 bytes are sent and if my ValuesReceived exceeds 12000, I once again have to restart my bluetooth device to get more values. I've tried flushoutput, but it hasn't worked. Any ideas on how to get continuous data into Matlab so I can process it in my GUI?

1
How are you closing it? Just fclose? Or do you mean during a second run of your code with the same MATLAB session? For the other, it sounds a bit like you might just need to increase your input buffer size and/or speed up the intermediate processing so the buffer doesn't overflow while you're processing the chunk of data you just read in. What is the rate at which the accelerometer outputs values, and how many/how often are you reading those values into MATLAB? - nkjt

1 Answers

0
votes

I figured out the problem. In order to not get this error anymore I simply had to follow the sequence

fclose(s);
delete(s);
clear s;

and then when I do

s= serial ('COM18');
set(s,'DataBits',8);
set(s,'StopBits',1);
set(s,'BaudRate',9600);
set(s,'Parity','none');
fopen(s);

I am no longer getting the error. It was just the order of operation to close the serial.