【问题标题】:Matlab and Arduino serial dataMatlab 和 Arduino 串行数据
【发布时间】:2017-04-13 19:44:46
【问题描述】:

我正在使用以下代码从 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 通过串行发送和接收的数据。

【问题讨论】:

    标签: string matlab arduino serial-port


    【解决方案1】:

    您可能在串行连接上使用了错误的终结器。

    我手边没有 Arduino,但终结器 CR/LF 应该可以工作。

    对您的代码的更改是:

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

    祝你好运,如果第一次尝试不成功,请尝试其他两个终结器。

    我有 90% 的把握这将解决您的问题,我在一些电机控制器上遇到了这个怪癖。 :)

    【讨论】:

      【解决方案2】:

      您必须设置休息时间。因为 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        相关资源
        最近更新 更多