Hi, I have created a serial communication for send and receive data. However, these function allows sending data to the serial port and retrieving the data from it. I understood it need some times (few seconds) for the function to execute. However, when i loop it. The time will be increase exponentially. I believe it cause hanging to my code. Can someone have better suggestion to replace fprintf for sending and fgetl for receiving binary bits to allow faster execution time? Many thanks in advance
Here is the coding for send and receive: For Send:
%Open the file
fid=fopen('XXX.mp3','rb'); % Open a file inside MATLAB any music file.
A=fread(fid,'uint16'); % Display the data in uint16
B=dec2bin(A); % Change decimal (0-65535) into 16 binary bits and store in matrix (Mx1) matrix
F=B'; % Transpose it so it will not in matrix format
[M N]=size(A); %Determine the size
looptimes=fix(M/5000); last=rem(M, 5000);
send_count=1;
loop_count=0;
C=[];
for i=1+5000*(send_count-1):5000*send_count %To send data 5kB
C=[C F((-15+16*(i)):16*(i))]; %16bits everytime loop and send
endfprintf(s,C) %Send to the serial port
send_count=1+send_count;
For receive:
file=[];
received_count=1;
loop_count=0; while strcmp(s.PinStatus.ClearToSend,'on') s.RequestToSend='on'; received=fgetl(s); %To receive bits from serial port
file=[file received]; %Concatenate back
received_count=received_count+1;size_byte=fix(size(file)/32); % The size of the file
M=size_byte(2); Video_bin=zeros(M,1);
for j=1:M % To arrange back the file
b=16*(j); a=-15+b; Video_bin= [Video_bin;file(a:b)]; end Video_dec=bin2dec(Video_bin); % From binary to decimal
fid1=fopen (Save_file, 'wb'); % Form back the original file
count=fwrite(fid1, Video_dec, 'uint16');
Best Answer