2014-12-22 57 views
1

我想檢查一下,如果我在Matlab中的串口上收到一個點('。')。爲此,我運行了10次循環,檢查是否得到了'。'。在串口上顯示「A dot is received」,否則顯示接收的內容。但收到'。'後,在串行端口上,它不顯示「點被允許」。這裏是我的代碼: -無法在Matlab中檢查串行端口上收到的值

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 
. 

. 

. 

. 

. 

. 

. 

. 

. 

. 

那麼,請告訴我哪裏是錯誤的。

+0

也許嘗試使用'strcmp':if strcmp(z,'。')。可能還會收到其他一些您無法看到的字符,例如回車或換行符。 – am304

+0

am304:我試過了,但它不起作用 –

+0

您還需要檢查回車符(''\ r'')和換行符(''\ n'')。 '如果strcmp(z,'。\ r \ n')'。實際上,查看'disp'的輸出,看起來你可能有兩個新的行字符:'如果strcmp(z,'。\ r \ n \ n')'。你需要進行實驗,直到找到正確的字符集,而不僅僅是點。 – am304

回答

2

您可以使用deblank(刪除所有空格字符)或strtrim(只刪除開頭和結尾的空格),使其擺脫不需要的字符:

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

strcmp(a,'.') 
ans = 

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

    1 

而且,你用fscanf來檢索數據串行端口,請嘗試使用fgetlfgetl獲取一行並丟棄終止符,因此應只檢索.(理論上)。

相關問題