我使用以下代码从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代码的任何输出?我正在检查Arduino通过串口监控串口发送和接收的数据。
答案 0 :(得分:1)
您可能在串行连接上使用了错误的终结符。
我没有Arduino方便,但终结符CR/LF
应该有效。
您的代码更改为:
s=serial('COM4','BAUD', 9600, 'Terminator','CR/LF'); % Baud rate and COM port
祝你好运,如果第一次尝试不成功,请尝试另外两个终结者。
我90%肯定这会解决你的问题,我在一些电机控制器上学到了这个怪癖。 :)
答案 1 :(得分:0)
您必须休息一下。因为Arduino在fopen之后重启...
clear s;
s=serial('COM4','BAUD', 9600); % Baud rate and COM port
fopen(s);
pause(1);
value1=('11,222;333<444>555?666');
display('data sent');
fprintf(s,'%s\n',value1);
fclose(s);