1

我想检查我是否在 Matlab 的串行端口上收到一个点('.')。为此,我运行 for 循环 10 次,检查是否得到 '.' 在串口上然后显示“接收到一个点”,否则显示接收到的任何内容。但在收到“。” 在串行端口上,它不显示“收到一个点”。这是我的代码:-

s=serial('COM5', 'BaudRate',9600);%, 'DataBits',8, 'Terminator','');
fopen(s);
disp('Port succefully Opened');
count=0;
checkdot = '.';
for x = 1:10

       recv= fscanf(s);
z = char(recv);
    if (z== '.')
        disp('A dot is received');

    else
        disp(z);
end

end
fclose(s);

这是我在命令窗口上的输出:-

>> Serialcomm
Port succefully Opened
.

.

.

.

.

.

.

.

.

.

所以,请告诉我错误在哪里。

4

1 回答 1

2

您可以使用deblank(删除所有空白字符) 或strtrim(仅删除前导和尾随空白) 来删除不需要的字符:

a = sprintf('.\r\n');
disp(a)
.

strcmp(a,'.')
ans =

     0
strcmp(strtrim(a),'.')
ans =

     1

此外,您正在使用fscanf从串行端口检索数据,请尝试使用fgetlfgetl得到一行并丢弃终止符,所以应该只检索.(理论上)。

于 2014-12-22T12:46:15.420 回答