2017-04-13 99 views
2

我從Matlab的使用下面的代碼發送一個字符串數據的Arduino:Matlab和Arduino的串行數據

clear s; 
s=serial('COM4','BAUD', 9600); % Baud rate and COM port 
fopen(s); 
value1=('11,222;333<444>555?666'); 
display('data sent'); 
fprintf(s,'%s\n',value1); 
fclose(s); 

我接收和使用下面的代碼處理中的Arduino字符串:

String command; 
int i; 
float data_rec; 
void setup() { 
    // put your setup code here, to run once: 
    command="11,222;333<444>555?666"; 
    Serial.begin(9600); 
} 
void loop() { 
    if(Serial.available() >0){ 
    String command=Serial.readString(); 
    parseCommand(command); 
    data_rec=Serial.parseInt(); 
    Serial.println("data_rec"); 
    Serial.println(data_rec); 
    } 
} 

void parseCommand(String com){ 
    String F_d; 
    String E_m; 
    String L_p; 
    String S_v; 
    String H_d; 
    String L_t; 

    F_d=com.substring(0,com.indexOf(',')); 
    E_m=com.substring(com.indexOf(',')+1,com.indexOf(';')); 
    L_p=com.substring(com.indexOf(';')+1,com.indexOf('<')); 
    S_v=com.substring(com.indexOf('<')+1,com.indexOf('>')); 
    H_d=com.substring(com.indexOf('>')+1,com.indexOf('?')); 
    L_t=com.substring(com.indexOf('?')+1,com.length()); 

Serial.println(com); 
Serial.println("F_d:"); 
Serial.println(F_d); 
Serial.println("E_m:"); 
Serial.println(E_m); 
Serial.println("L_p:"); 
Serial.println(L_p); 
Serial.println("S_v:"); 
Serial.println(S_v); 
Serial.println("H_d:"); 
Serial.println(H_d); 
Serial.println("L_t:"); 
Serial.println(L_t); 
} 

這不適用於Matlab。但是,當我從串行監視器發送相同的字符串時,它似乎工作。

爲什麼我沒有得到任何輸出的Matlab代碼?我正在使用Serial Monitoring Studio監視串行端口,檢查Arduino通過串行發送和接收的數據。

回答

1

您可能在串行連接上使用了錯誤的終止符。

我沒有Arduino的方便,但終結者CR/LF應該工作。

的改變對你的代碼是:

s=serial('COM4','BAUD', 9600, 'Terminator','CR/LF'); % Baud rate and COM port 

祝你好運,如果第一次嘗試不成功,嘗試其他兩個端接。

我90%肯定這會解決你的問題,我在某些電機控制器上學到了這個怪癖。 :)