我正在研究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
答案 0 :(得分:0)
当您不关闭端口时,通常会发生这种情况。
在您的代码中,何时关闭它?何时更改f
以便循环退出?
根据these people,您可以尝试
delete(instrfindall)
在尝试打开端口或
之前fopen(arduino);
closeFID = onCleanup(@() fclose(arduino));
...
恕我直言,第二种解决方案看起来更好(破坏性更小)
BTW:在fprintf
循环中放置延迟或睡眠(我不知道这是如何在ML中完成的),否则你会向穷人的Arduino发送太多数据......