matlab功能強大,串口操作也很簡單,相信看過以下兩個實驗你就能掌握咯!開始吧!
實驗1:
從電腦COM2口讀取數據,並將數據保存在TXT文件中,方便數據分析,下面是M腳本:
- %名 稱:Matlab串口-Lab1
- %描 述:串口讀,並寫入txt文件中
- s=serial('com2');
- s.BytesAvailableFcnMode='byte'; % 串口設置
- s.InputBufferSize=4096;
- s.OutputBufferSize=1024;
- s.BytesAvailableFcnCount=100;
- s.ReadAsyncMode='continuous';
- s.Terminator='CR';
- fopen(s); %打開串口
- out=fread(s,10,'uint8'); %一次讀出10個字符
- fprintf('%3c',out); %一個字符占三位輸出,%c字符,%d整型
- fid=fopen('serial_data.txt','w+'); % 'a+'讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之
- fprintf(fid,'%3c',out); % 寫入文件中
- fclose(fid);
- fclose(s);
- delete(s);
實驗2:
同樣的功能,用函數寫更規范,代碼如下:
- % 打開串口
- function scom = OpenSerial(sname, HReadFcn)
- scom = serial(sname);
- scom.BytesAvailableFcnMode = 'terminator';
- scom.Terminator = '.';
- scom.BytesAvailableFcn = HReadFcn;
- try
- fopen(scom);
- catch err
- fprintf('%s打開失敗。\n', sname);
- end
- fprintf('%s成功打開。\n', sname);
- end
- % 寫串口
- function WriteSerial(scom, str)
- fprintf(scom, str ,'async'); % 異步方式
- end
- % 讀串口回調函數
- function ReadFcn_Com2(obj, ~)
- n = get(obj, 'BytesAvailable');
- if n
- a = fread(obj, n, 'uchar');
- c = char(a');
- fprintf('%s\n', c);
- end
- end
- % 關閉串口
- function CloseSerial(scom)
- try
- fclose(scom);
- catch err
- fprintf('%s關閉失敗。', scom.Name);
- return
- end
- delete(scom);
- end
仿真如下,使用虛擬串口連接串口2和3,打開串口調試助手,以默認方式打開com3
在matlab命令框中如下輸入命令打開串口com2
>> scom =OpenSerial('com2', @ReadFcn_Com2);
com2成功打開。
向com2寫
>>WriteSerial(scom, 'Hello!');
串口調試助手收到信息
用串口調試助手回復matlab,點上圖中的手動發送(發送的信息已英文句號.結束),matlab中收到信息
Hello, Matlab.
>>
關閉串口
>> CloseSerial(scom)
部分參考:http://blog.sina.com.cn/s/blog_6163bdeb0102e8qc.html