MATLAB Answers

0

Arduino clearing existing connection issue

Asked by Borian Spassov on 21 Jun 2019
Latest activity Edited by Geoff Hayes
on 21 Jun 2019
I have declared a global object arduino() and in a different function I would like to clear this connection and create another. It keeps saying that the connection to arduino is existing eventhough I use "clearvars -global a".
Error: "MATLAB connection to Uno at COM3 exists in your workspace. To create a new connection, clear the existing object."
function ClearArduino(app)
clearvars -global a
a = arduino('COM3', 'Uno'); %Error is on this line
writeDigitalPin(a, 'D11', 0);
writeDigitalPin(a, 'D12', 0);
writeDigitalPin(a, 'D13', 0);
end
function runArduinoCode(app, indicator)
clearvars -global a
a = arduino('COM3', 'Uno');
while indicator == "On"
writeDigitalPin(a, 'D11', 1);
pause(0.5)
writeDigitalPin(a, 'D11', 0);
writeDigitalPin(a, 'D12', 1);
pause(0.5)
writeDigitalPin(a, 'D12', 0);
writeDigitalPin(a, 'D13', 1);
pause(0.5)
writeDigitalPin(a, 'D13', 0);
end
clear a;
end

  0 Comments

Sign in to comment.

1 Answer

Answer by Geoff Hayes
on 21 Jun 2019
Edited by Geoff Hayes
on 21 Jun 2019

Borian - why not define a property in your app that represents the arduino object so that all callbacks have access to it? See Share Data Within App Designer Apps for details. Presumably you would do something like
properties (Access = private)
arduinoObject = [] % arduino object
end
and your callbacks (?) would become something like
function ClearArduino(app)
if ~isempty(app.arduinoObject)
clear(app.arduinoObject);
end
app.arduinoObject = arduino('COM3', 'Uno');
writeDigitalPin(app.arduinoObject, 'D11', 0);
writeDigitalPin(app.arduinoObject, 'D12', 0);
writeDigitalPin(app.arduinoObject, 'D13', 0);
end
function runArduinoCode(app, indicator)
if ~isempty(app.arduinoObject)
clear(app.arduinoObject);
end
app.arduinoObject = arduino('COM3', 'Uno');
while indicator == "On"
writeDigitalPin(app.arduinoObject, 'D11', 1);
pause(0.5)
writeDigitalPin(app.arduinoObject, 'D11', 0);
writeDigitalPin(app.arduinoObject, 'D12', 1);
pause(0.5)
writeDigitalPin(app.arduinoObject, 'D12', 0);
writeDigitalPin(app.arduinoObject, 'D13', 1);
pause(0.5)
writeDigitalPin(app.arduinoObject, 'D13', 0);
end
end
I have no idea if the above will work but it may be something to start with.

  0 Comments

Sign in to comment.