Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serial port 如何使Scilab在Linux(Ubuntu)中打开与/dev/ttyACM0 USB端口的串行通信_Serial Port_Arduino_Communication_Scilab - Fatal编程技术网

Serial port 如何使Scilab在Linux(Ubuntu)中打开与/dev/ttyACM0 USB端口的串行通信

Serial port 如何使Scilab在Linux(Ubuntu)中打开与/dev/ttyACM0 USB端口的串行通信,serial-port,arduino,communication,scilab,Serial Port,Arduino,Communication,Scilab,我正在尝试打开和Arduino之间的串行通信。但是,Linux Ubuntu总是在/dev/tty**ACM0**端口识别Arduino。当我在Scilab中编写h=openserial(1,9600,n,8,1)时,我知道我在对它说,在Linux中打开到COM1或/dev/tty**S0**的串行通信 但是,例如,如果我使用h=openserial(N,“9600,N,8,1),假设N=port number,那么在Windows和Linux中,我将始终拥有COMN和/dev/tty**S**

我正在尝试打开和Arduino之间的串行通信。但是,Linux Ubuntu总是在
/dev/tty**ACM0**
端口识别Arduino。当我在Scilab中编写
h=openserial(1,9600,n,8,1)
时,我知道我在对它说,在Linux中打开到
COM1
/dev/tty**S0**
的串行通信

但是,例如,如果我使用
h=openserial(N,“9600,N,8,1)
,假设
N=port number
,那么在Windows和Linux中,我将始终拥有COMN和
/dev/tty**S**(N-1)

如何在Scilab for Linux中通过
/dev/tty**ACM0**
端口打开串行通信?

查看repo中的

然后调用openserial,如下所示:

h=openserial("ACM0","9600,n,8,1)
还要确保
/dev/ttyACM0
是正确的设备节点。这是来自
ls-l
的示例输出,您可以运行它来确认:

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 188,  0 Mar 12 18:16 /dev/ttyACM0
如果以普通用户身份打开串行端口时出错,您可以将自己添加到正确的组中。根据上面的示例,在我的openSUSE发行版上,组名是dialout。您的组名可能不同,因此请在以下命令中替换该组名:

sudo usermod -a -G dialout <USER_NAME>
sudo usermod-a-G拨号
只需键入:

h = openserial("/dev/ttyACM0", "9600, n, 8, 1");
h = openserial("/dev/ttyACM0", "9600, n, 8, 1");

您就完成了。

保持简单,字符串是端口的有效选项,因此Luis post:

“…只需键入:

h = openserial("/dev/ttyACM0", "9600, n, 8, 1");
h = openserial("/dev/ttyACM0", "9600, n, 8, 1");
你就完了……”

例如,在Scilab上支持arduino its的串行端口“/dev/ttyACM0”类型:

n=300 // plot 300 data points from serial port "/dev/ttyACM0"
h=openserial("/dev/ttySACM0","9600,n,8,1")
i=1;
while i<=n
data(i) = strtod(readserial(h)); // char to number
plot(i,data(i),'b-o'); // real time plot
drawnow(); // show data
i=i+1;
end
n=300//从串行端口打印300个数据点/dev/ttyACM0”
h=openserial(“/dev/ttySACM0”,“9600,n,8,1”)
i=1;

在我离开的时候,我按照你的建议做了,我得到了以下消息:--错误999 TCL_EvalStr,在第1行无法打开“ACM0”:在函数openserial的第17行“set porthandle[open ACM0 r+]”中执行“open ACM0 r+”时没有此类文件或目录,该函数由:h=openserial(“ACM0”,“9600,n,8,1”)调用@FabioSilva-您确定您的串行端口设备节点是
/dev/ttyACM0
?@FabioSilva-已使用有关普通用户可能存在的权限问题的更多信息更新了答案。但是您的错误消息
没有这样的文件或目录
表明设备节点不正确。即使执行了所有步骤,我仍然有相同的错误消息。为了解决我的问题并满足我的需要,我现在使用八度音阶,而且效果很好。我认为这确实是Scilab或串行工具箱的一个bug。无论如何,谢谢你的帮助。问候。知道scilab在哪里安装atom吗?我从头重写了串行通信库,使其与MATLAB功能相当,请查找原型。