Serial Communication problem fread() in while loop
5 views (last 30 days)
Show older comments
Hi, I am trying to make MATLAB capture an image upon received a character 'c' at serial port. The following is my coding
% Start up the video
vid = videoinput('winvideo', 1);
preview(vid);
%Wait for signal from pushbutton
s = serial('COM12');
while(w ~='c')
fopen(s)
a=1
w = fread(s) ;
a=2
fclose(s)
end
Image = getsnapshot(vid);
imagesc(Image)
closepreview(vid)
delete(vid);
I've tried without using the while loop, using an if statement instead before the getsnapshot, but the execution continue to getsnapshot when the fread timeout and fail (because 'c' not yet received at serial port). Therefore i try to add the while loop, but the result turn out the same. execution step out from while loop even before the condition (w==c) is met.
I tried out seeting the timeout of serial port, but instead of doing what i expected, the capture of image delayed, even when 'c' is sent to serial port.
Anyone here give suggestion on how i can change my code to function as what i desire?
0 Comments
Answers (1)
Walter Roberson
on 18 May 2012
fopen() before the loop. Initialize w before the loop. If you use fread(), specify the number of characters to read and specify that you expect characters and want characters output. fclose() after the loop.
Before you fopen(), set() the properties of "s" for BytesAvailableFcnMode to 'byte', and Terminator to '' . The 'byte' mode is important: otherwise the fread() will not return until timeout or you receive a line terminator.
0 Comments
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!