在Arduino上传草图

时间:2015-07-09 11:34:06

标签: matlab arduino

我正在研究MATLAB和Arduino之间的接口。换句话说,我想将一些数据从MATLAB发送到Arduino。我在MATLAB和Arduino IDE中编写了程序。

MATLAB程序:

c = 1;
if (c ~= 0 )
    f = 1;
else     
    disp('vhxhjf');
end
disp(f)

arduino=serial('COM5','BaudRate',9600);   % create serial communication object on port COM4      
fopen(arduino); % initiate arduino communication
while f
   fprintf(arduino,'%s',char(f)); % send answer variable content to arduino   
end 
fclose(arduino); % end communication with arduino

Arduino代码:

int ledPin = 13;
int matlabData ;
void setup() { 
   pinMode(13,OUTPUT);
   Serial.begin(9600);
   // turn the LED on when we're done
   // digitalWrite(13, HIGH);
}
void loop() {  
  if(Serial.available() > 0 ) {
    matlabData = Serial.read();
    if ( matlabData != 0) {
     digitalWrite(13, HIGH);
     delay(1000);
     digitalWrite(13,LOW);
     delay(1000);
    }
    else
    digitalWrite(13,LOW); 
  }     
}

问题是每当我上传草图时,这个错误都会在arduino ide中被定期抛出:

 avrdude: ser_open(): can't open device "\\.\COM5": The system cannot find the file specified

第一次尝试时效果很好,但之后连续抛出上述错误。

同样在matlab中,第一次尝试后,抛出以下错误:

enter code here
    Error using serial/fopen (line 72)
    Open failed: Port: COM5 is not available. No ports are available.
    Use INSTRFIND to determine if other instrument objects are connected    to        requested device.

    Error in SP (line 65)
    fopen(arduino); % initiate arduino communication

  >> instrfind

    Instrument Object Array

     Index:    Type:     Status:   Name:  
      1         serial    open      Serial-COM5
      2         serial    closed    Serial-COM5

并且命令instrfind显示com5端口在第一次尝试后关闭。

我已尝试过此链接中提供的解决方案,但它无效:   http://forum.arduino.cc/index.php?topic=48421.0

1 个答案:

答案 0 :(得分:0)

当您不关闭端口时,通常会发生这种情况。

在您的代码中,何时关闭它?何时更改f以便循环退出?

根据these people,您可以尝试

delete(instrfindall)

在尝试打开端口或

之前
fopen(arduino);
closeFID = onCleanup(@() fclose(arduino));
...

恕我直言,第二种解决方案看起来更好(破坏性更小)

BTW:在fprintf循环中放置延迟或睡眠(我不知道这是如何在ML中完成的),否则你会向穷人的Arduino发送太多数据......