从Matlab发送数组到Arduino

时间:2015-11-14 11:58:56

标签: matlab arduino

我想从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..

2 个答案:

答案 0 :(得分:0)

使用serial.fprintf您正在向设备写入文本,这需要每个数字一个字节。根据您的描述,我假设您要编写单个字节,为此目的使用serial.fwrite

答案 1 :(得分:0)

您应该添加OutputBufferSize,InputBufferSize,如下所示:

arduino=serial('COM7','BaudRate',115200,'OutputBufferSize',2400,'InputBufferSize',2400);

其中'2400'是数组的大小。 祝你好运!