Arduino 보드에서 시리얼 라인을 통해 들어오는 데이터 스트림이 있습니다. 스트림은 다음과 같습니다.'fscanf'를 사용하여 MATLAB의 시리얼 라인에서 데이터를 읽을 때 제로 해석
0x43 0x03 0x39 0x00 0x0D 0x0A
처음 두 바이트 (0x43 및 0x03)는 1 바이트 정수 값입니다. 다음 2 바이트 (0x39 및 0x00)는 단일 16 비트 리틀 엔디안 부호있는 정수 값입니다. 마지막 두 바이트 (0x10 및 0x13)는 종결 자 시퀀스 ("\ r \ n")로 간주됩니다.
이 데이터를 읽으려면 MATLAB을 사용하고 있습니다. 나는 직렬 연결을 만들고, 열고, 데이터를 읽는다. 불행하게도, 0x30을 바이트 값으로 사용할 때 문제가 발생합니다. fscanf은 단순히 문자열의 널 종결 자로 간주하기 때문입니다. 불행하게도
%Create and open serial connection
serialcon = serial('COM5');
fopen(serialcon);
firstChar = fscanf(serialcon, '%c', 1); %Read 0x43
secondChar = fscanf(serialcon, '%c', 1); %Read 0x03
integerByteChars = fscanf(serialcon, '%c', 2); %Read 0x39 and 0x00
fscanf(serialcon, '%c'); %Read until end-of-line
integerBytes = uint8(integerByteChars); %value should be (in hex): [ 0x39 0x00 ]
integerValue = typecast(integerBytes, 'uint16'); %value should be (in hex): 0x0039
이다 "integerByteChars"어떻게 나는 그것이 싶습니다 같은 두 요소의 배열이 아니라 단지 오히려 1 요소의 배열 때문에 fscanf
무엇 : 여기
내가 필요로하는 것은 0 바이트 일지라도 버려 두지 않고이 바이트를 데이터로 읽는 함수입니다. 그 기능을 사용할 수있는 기능은 무엇입니까? fscanf은 그렇게 할 수 있습니까?
죄송합니다. 예, 실수로 16 진수 값 대신 CR/LF 바이트의 십진수 값을 넣었습니다. 올바른 16 진수 값을 사용하기 위해 원래 게시물을 편집했습니다. 그것을 알아 줘서 고마워. – David