2014-12-22 2 views
1

Matlab의 직렬 포트에 점 ('.')이 있는지 확인하고 싶습니다. 이를 위해 나는 루프가 10 회 실행되어 'got'인지 확인합니다. 직렬 포트에 "A dot dot received"라고 표시하고 그렇지 않으면 수신중인 것을 표시합니다. 그러나 '받는다.' 직렬 포트에 "A dot is receibed"가 표시되지 않습니다. 명령 창에서 내 출력이 여기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'')를 확인해야합니다. 'if strcmp (z, '. \ r \ n')'. 실제로'disp'의 결과물을 보면'if strcmp (z, '. \ r \ n \ n')'와 같은 두 개의 새로운 줄 문자가있는 것 같습니다. 올바른 문자 집합을 찾을 때까지 실험해야합니다. – am304

답변

2

당신은 deblank (제거 모든 공백 문자) 또는 strtrim을 사용할 수 있습니다 원하지 않는 문자를 제거하는 (단지 선행 및 후행 공백 제거), 당신은에서 데이터를 검색 fscanf을 사용하고 또한

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

strcmp(a,'.') 
ans = 

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

    1 

직렬 포트 인 경우 fgetl을 대신 사용해보십시오. fgetl은 한 줄을 가져와 종결자를 버리기 때문에 . (이론적으로) 만 검색해야합니다.

관련 문제