cannot send data from arduino to MATLAB using a COM port - matlab

I'm trying to follow this guide on sending data from an arduino to a MATLAB program. I have every piece of code exactly matching the code in the example. However, whenever I attempt to start up the MATLAB program, I get the error message:
Error using serial/fopen (line 72) Open failed: Port: COM3 is not
available. Available ports: COM1. Use INSTRFIND to determine if other
instrument objects are connected to the requested device.
Error in Untitled8 (line 2) fopen(arduino)
Can anyone help me figure out how to get this working?
EDIT: My arduino is printing to COM3, so if I want MATLAB to hear it, it also needs to be COM3.

If I understand correctly you are using the Arduino IDE/Monitor to communicate with your Arduino on COM3. You want to have Matlab connect to the Arduino.
Since RS-232 is a point to point methology, you can only have one program/device on each end unless you add a bunch of hijinks.
When you have the Arduino IDE/Monitor open it uses the com port and other programs are denied access.
I think you need to close the Arduino monitor program to release Com port 3 and then the Matlab program should be able to open the port.

Related

Connecting serial port via MATLAB App Designer

I want to connect my Arduino to App Designer by using the "drop down" list. This is what my app looks like
First, I am looking for if there is any serial com. system. And I am writing them to Drop Down.
p = instrhwinfo('serial');
app.SerialPortsDropDown.Items = p.AvailableSerialPorts;
After this I have planned to read the serial port that is shown in the Drop Down and write it to serialport()
app.a = serialport(app.SerialPortsDropDown.value,9600);
Unfortunately these lines did not work. The error message I got:
Error using serialport (line 116)
Unable to connect to the serialport device at port 'COM9'. Verify that
a device is connected to the port, the port is not in use, and all
serialport input arguments and parameter values are supported by the
device.
So, the first two lines of code work. I am able to see COM9 (the com my arduino connected) in the drop-down list. This shows there is a serial port at COM9. But when it comes to reading it with app.a = serialport(app.SerialPortsDropDown.value,9600); it gives error.
How can I connect a serial port via the MATLAB App-designer?
app.a = serialport(app.SerialPortsDropDown.value,9600);
This is a wrong way of connecting Arduino to MATLAB. This declaration does not let us use Arduino functions such as 'writeDigitalPin, writePWMDutyCycle'.,
As I mentioned in the comments, it is still important to clear the port first and connect the serial port.
Lastly, the true way to declare Arduino to be able to use its functions as in the following:
app.a = arduino(app.SerialPortsDropDown.value, 'Tag of your arduino card');

Cannot connect to COM port in MATLAB

I am running a code for my FPGA to collect data from accelerometer and I am able to print that to Tera Term. And I followed this tutorial to have MATLAB plot the data in real time.
I have essentially used the same code except a few changes in variable names title.
It gives me the following error.
The mathwork website has a similar question posted but there is no solution.
Open failed: Cannot connect to the COM6 port. Possible reasons are
another application is connected to the port or the port does not
exist.
Error in Untitled (line 8) fopen(s);
TIA

Trouble with communication with usb B type machine with Matlab

I am using matlab to communicate with several machines.
I am trying to connect with LCC25 (Liquid crystal retarder controller made by Thorlabs) using usb b to usb a cable.
I made a code like this.
clear all; clc;
%%
ss=serial('COM7','BaudRate',9600,'DataBits',8);
set(ss,'Parity','none');
set(ss,'Terminator','LF');
fopen(ss);
fprintf(ss,'*idn?');
aa=fscanf(ss)
fclose(ss)
Then I get "Warning : Unsuccessful read : A timeout occurred before the Terminator was reached aa=="
Is there any problem in my code?
I am also interested in buying the LCC25 and controlling it with MATLAB, so this is very interesting for me and I would love to find out whether it works...
To debug your code, I am wondering what happens when you comment out everything but:
ss=serial('COM7','BaudRate',9600,'DataBits',8);
set(ss,'Parity','none');
set(ss,'Terminator','LF');
fopen(ss);
Since then we can now if the problem is in establishing the connection itself (which you should not run every time btw!), or in trying to send a command to the device...
If the object creation is succesful, you should see something like this:
Serial Port Object : Serial-COM4
Communication Settings
Port: COM7
BaudRate: 9600
Terminator: 'LF'
Communication State
Status: closed
RecordStatus: off
Read/Write State
TransferStatus: idle
BytesAvailable: 0
ValuesReceived: 0
ValuesSent: 0
Then you can try to add run
fopen(ss)
fscanf(ss)
in a seperate file, and see what the output is. If all of this works, you can start to try sending commands using the 'fprintf' command, but make sure not to run the 'serial' and 'fopen' command every
I am wondering where you obtained the command string '*idn?', did you find this in the help file? The same for the terminator 'LF', are you sure this is the correct terminator to use for the LCC25? When reading the error message you received, I suspect the problem to be that you might need to use other terminators, such as 'CR'.

PC to PC Serial port communication through Matlab

I have two laptops are connected via a USB cable, the USB on one end is attached to a USB to serial adapter. I need to send information from one laptop (Mac) to the other laptop (PC) through Matlab.
I know how to use fopen to use serial ports in Matlab to send these "markers" to the second laptop. However, I am unsure on how to read them at the receiving end.
I currently have the following code where the serial connection is opened:
% connect to serial port to send markers
portID = '/dev/tty.USA28X145P2.2';
global markerID
[markerID, err] = fopen(portID, 'w');
if ~isempty(err)
error('An error was returned whilst connecting to the serial port
to send markers. The error was:\n\t"%s"', err);
end
My Matlab script then calls a function that uses fwrite to write the information that I need to the object that was opened using fopen.
Now I am unsure how to "receive" these in Matlab on the other laptop. Do I need to use fscanf?
I am quite new to this so I'm not sure how to proceed. Any suggestions would be appreciated!
Thanks

Virtual Com-Port communication through Matlab

While connecting my Com-port using matlab, many a times(4 out of 5) I get an error
??? Error using ==> serial.fopen at 72
Port: COM21 is not available. Available ports: COM3,
COM10, COM17, COM18.
However , sometimes it gets connected and responds as expected.
Can anyone tell me whats the problem with this?
By the way , I am using this snippet to connect my microcontroller to PC through USB
s = serial('COM21'); // code to initialize the req COM i.e. COM21 for me
fopen(s);
I ran into this issue before. It turns out MATLAB doesn't really handle plug-and-play very well, as evidenced by this thread:
http://www.mathworks.com/matlabcentral/newsreader/view_thread/311133
Long story short: if you want MATLAB to detect a hardware change, you need to restart it. MATLAB seems to only look for devices when it starts up.