Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
11 years, 2 months ago.
Serial interfacing to MATLAB: port fails after a write
I've adapted the code in the online example to send a character 'u' to a mbed as a trigger to release data. The Matlab .m file fails after the fprintf. The code works fine with a Tera Term terminal and The Matlab code below works fine when I code out the 'u' trigger. I know the 'u' is sent as the LED1 lights.
I must be missing something simple, but I can't think what!! Can you help?
The code on the mbed is:
----------
- include "mbed.h" Serial pc(USBTX, USBRX); DigitalOut myled(LED1);
AnalogIn x(p15);
int main() {
char c = pc.getc();
if(c == 'u') {
myled = 1;
while(1) {
pc.printf("%d\n", x.read());
wait(0.1);
}
}
}
----------
MATLAB code:
-----------------
function mbedread()
TIMEOUT = 5; %time to wait for data before aborting n = 2; %size of n x n array to be addressed
try %create serial object to represent connection to mbed mbed = serial('COM5', ... 'BaudRate', 9600, ... 'Parity', 'none', ... 'DataBits', 8, ... 'StopBits', 1); %change depending on mbed configuration
set(mbed,'Timeout',TIMEOUT); %adjust timeout to ensure fast response when mbed disconnected
fopen(mbed); %open serial connection
%READ OUT ARRAY DATA
fprintf (mbed, '%s', 'u'); %send a 'u' to mbed to release data
for column = 1:1:n %read in n column values into an array for row = 1:1:n %read in n row values into an array
values(row,column) = fscanf(mbed, '%d'); %get values into vector
end end
fclose(mbed); %close connection (this should never be reached when using while(1), but included for completeness)
values
catch
%in case of error or mbed being disconnected
disp('Failed!');
fclose(mbed); %close connection to prevent COM port being lokced open
end
--------------------
Question relating to:
1 Answer
11 years, 2 months ago.
Please use code tags (<<code>>
<</code>>) around your code, now it is not readable.
Anyway, yeah it happens, no we don't have a real solution for it (hopefully one day mbed devs get around to looking at it), yes we have workarounds: http://mbed.org/forum/helloworld/topic/3568/
TL;DR there is two options: downgrade to matlab 2009 or earlier (after that they improved serial handling, not much of an improvement imo), or put every printf statement inside a 'try' block, since they work fine, only after sending is complete they throw an exception.