2015-11-14 5 views
0

Я хотел бы отправить более 150 целых чисел (16 бит) из Matlab (R2015a) в Arduino (Mega 2560). По этой причине я отправляю эти числа в массив. Однако размер буфера составляет 64 байта. Мое решение здесь: после того, как Matlab записывает массив в буфер, он ждет сообщение (номер) от Arduino. После того, как Arduino читает буфер, он отправляет сообщение (номер) в Matlab.Отправить Array от Matlab до Arduino

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

Использование serial.fprintf вы пишете текст на устройстве, для этого требуется один байт для каждого цифра. Из вашего описания я предполагаю, что вы хотите написать отдельные байты, для этого используйте serial.fwrite.

+0

Daniel, я хотел бы написать массив в буфер при одном соединении. Как я могу обработать его с помощью fwrite? – blknt

+0

Я не понимаю ваш вопрос. – Daniel

+0

Я хотел бы отправить массив в Arduino, используя буфер один раз. – blknt

0

Вы должны добавить OutputBufferSize, InputBufferSize, как это:

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

где '2400' является размер массива. Удачи!

Смежные вопросы