2015-07-09 4 views
0

Я работаю над созданием интерфейса между MATLAB и Arduino. Другими словами, я хочу отправить некоторые данные из MATLAB в Arduino. Я написал программы как в MATLAB, так и в Arduino IDE.Загрузка эскиза в Arduino

программа 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 язь:

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

Я также проверил серийный порт и плату в arduino ide. они оба правильны. i.e arduino uno и com5 –

ответ

0

Это обычно происходит, когда вы не закрыть порт.

В вашем коде, когда вы его закрываете? Когда f изменено так, что петля выходит?

Согласно these people, вы можете попробовать сделать

delete(instrfindall) 

, прежде чем пытаться открыть порт или

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

ИМХО второе решение выглядит лучше (менее разрушительными)

КСТАТИ: положите задержку или сон (я не знаю, как это делается в ML) в цикле fprintf, иначе вы отправите слишком много данных бедному Arduino ...

Смежные вопросы