I'm trying to open a serial communication between Scilab and Arduino. However, Arduino is always recognized by Linux Ubuntu in the /dev/tty**ACM0**
port. When I write h=openserial(1,"9600,n,8,1)
in Scilab I know that I'm saying to it, to open a serial comunication to COM1
or /dev/tty**S0**
in Linux.
But, for example, if I use h=openserial(N,"9600,n,8,1)
, assuming N=port number
, I will always have COMN, in Windows and /dev/tty**S**(N-1)
in Linux.
How do I open a serial comunication through /dev/tty**ACM0**
port in Scilab for Linux?
Looking at the openserial.sci
from the Serial Communication Toolbox for Scilab repo,
function h=openserial(p,smode,translation,handshake,xchar,timeout)
//port name
if ~exists("p","local") then p=1; end
if type(p)==1 | type(p)==8 then
if p<=0 then error("port number must be greater than zero"); end
if getos() == "Windows" then
port="COM"+string(p)+":"
else
port="/dev/ttyS"+string(p-1)
end
elseif type(p)==10
port=p
else
error("port to open must be either a number or a string")
end
The port is always set to /dev/ttyS<PORT_NUMBER>
. So in your local toolbox files, you could try editing the following lines in openserial.sci
to something like this:
function h=openserial(p,smode,translation,handshake,xchar,timeout)
//port name
if ~exists("p","local") then p=1; end
if type(p)==1 | type(p)==8 then
if p<=0 then error("port number must be greater than zero"); end
if getos() == "Windows" then
port="COM"+string(p)+":"
else
port="/dev/ttyS"+string(p-1)
end
elseif type(p)==10
port=p
elseif type(p)=="ACM0"
port="/dev/ttyACM0"
else
error("port to open must be either a number or a string")
end
and then call openserial as follows:
h=openserial("ACM0","9600,n,8,1)
Also make sure that /dev/ttyACM0
is the correct device node. This is a sample output from ls -l
, that you can run to confirm:
$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 188, 0 Mar 12 18:16 /dev/ttyACM0
If you're getting errors opening the serial port as a regular user, you might add yourself to the correct group. Based on the above example, the group name is dialout
on my openSUSE distro. It might be different on yours, so substitute that group name in the following command:
sudo usermod -a -G dialout <USER_NAME>