我想从Matlab(R2015a)向Arduino(Mega 2560)发送150多个整数(16位)。出于这个原因,我将这些数字发送到一个数组中。但是,缓冲区大小为64字节。我的解决方案在这里:在Matlab将数组写入缓冲区后,它等待来自Arduino的消息(数字)。在Arduino读取缓冲区后,它会向Matlab发送一条消息(编号)。
Matlab代码:
arduino=serial('COM5','BaudRate',9600);
fopen(arduino);
q=150;
X=rand(1,q);
d=floor(q/64);
r=rem(d,64);
n=1;
while(n<=d+1)
if(n~=d+1)
Z=[];
for w=(64*(n-1)+1):64*n
Z=[Z X(w)];
end
fprintf(arduino,'%d',Z);
b1=fread(arduino,1);
if(b1==99)
n=n+1;
end
else
Z=[];
for w=1:r
Z=[Z X(w)];
end
fprintf(arduino,'%d',Z);
b2=fread(arduino,1);
if(b2==99)
n=n+1;
end
end
end
fclose(arduino);
Arduino代码:
char matlabdata[64];
int index;
int mode=0;
void setup() {
Serial.begin(9600);
}
void loop() {
if(mode==0){
if(Serial.available()>0){
index = Serial.readBytesUntil(' ',matlabdata,64);
matlabdata[index] = '\0';
mode=1;
}
}
else if(mode==1){
Serial.write(B01100110);
mode=0;
for(int x=0; x<64;x++){
matlabdata[x]='\0';
}
}
Serial.flush();
}
Matlab错误:
Unexpected error: The number of bytes written must be less than or equal to OutputBufferSize-BytesToOutput..
答案 0 :(得分:0)
使用serial.fprintf
您正在向设备写入文本,这需要每个数字一个字节。根据您的描述,我假设您要编写单个字节,为此目的使用serial.fwrite
。
答案 1 :(得分:0)
您应该添加OutputBufferSize,InputBufferSize,如下所示:
arduino=serial('COM7','BaudRate',115200,'OutputBufferSize',2400,'InputBufferSize',2400);
其中'2400'是数组的大小。 祝你好运!