2016-09-16 4 views
0

직렬 포트를 사용하는 Arduino 마이크로 컨트롤러를 기반으로 로봇을 제어하려고합니다. 내가 만들려고 할 때 MATLAB Arduino와의 직렬 통신, fwrite 함수가 없습니다. fprintf와 함께 작동

clear; 
clc; 
s=serial ('COM19'); 
set(s,'BaudRate',115200); 
fopen(s); 
fprintf(s,'%d',0); 
fprintf(s,'%c',13); 
fprintf(s,'%d',256); 
fprintf(s,'%c',13); 
fprintf(s,'%d',512); 
fprintf(s,'%c',13); 
fprintf(s,'%d',1000); 
fprintf(s,'%c',13); 
fclose(s); 
delete(s); 

그러나 그것은 % d의 해당 문이 작동하지 않습니다 FREAD 작업 : 로봇은 완벽하게 정상적으로 다음 코드로 실행됩니다. 그러나 fprintf (s, '% c', 13) 대신 fwrite (s, 13, 'uchar')를 사용하면 문제가 없습니다. 어떤 데이터 형식을 % d (i는 'int'를 사용 했음)로 바꿀지 이해하지 못하고 어떤 문제가 있습니다. 누구든지 어떤 제안이라면 큰 도움이 될 것입니다. 당신은

답변

0

주제는 매트랩 문서에 설명되어 감사 :
http://www.mathworks.com/help/matlab/matlab_external/writing-and-reading-data.html

는 fprintf를 - 장치에
에 fwrite를 텍스트 쓰기 - 또한 언급 한 것

장치에 이진 데이터 쓰기 :

기본적으로 fprintf는 g % s \ n 형식 ... 장치로 보낸 명령의 \ n이 Terminator 속성 값으로 바뀌므로 ValuesSent 속성 값에 종결자가 포함됩니다.

위 문서에 따르면 fprintf 명령을 사용하면 전송 된 텍스트의 끝에 \n이 추가됩니다. UINT8 형식 \n 진 및 텍스트 데이터의 차이의 10

예 같다 :
fwrite(s, 'A', 'uchar')의 값이 65 ('A'의 ASCII 값)이 단일 바이트를 전송한다.
fprintf(s, "%c", 'A')은 65 10 (10은 종결 자임)이라는 두 바이트를 보냅니다.
fprintf(s,'%d',100);은 바이트를 전송합니다. 49 48 48 10 (49는 ASCII 값이 '1'임).
fwrite(s, 100, 'uchar');는 1 바이트에 해당 전송 : 당신은 아두 이노 소프트웨어에서 단일 바이트를 읽는 Serial.read()를 사용하는 경우에는 100

는 아두 이노 이진 데이터 형식을 예상하고있다.
Matlab에서 fwrite 명령을 사용하여 이진 데이터를 전송할 수 있습니다.
Arduino 소프트웨어에서 255를 초과하는 정수 값 (예 : uint16 형식의 2 바이트 전송)을 보내려면 Arduino 소프트웨어에서 2 바이트를 수신하고 단일 uint16 요소로 처리해야합니다.

텍스트 데이터 (Matlab에서 fprintf 사용)를 사용하려면 텍스트 (ASCII) 형식을 읽도록 Arduino 소프트웨어를 수정해야합니다.
참조 : https://www.arduino.cc/en/Tutorial/ReadASCIIString