Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Ubuntu 如何向ttyACM0设备写入命令,并使用C/C++;_Ubuntu_Tty_C_C++_Read Write - Fatal编程技术网

Ubuntu 如何向ttyACM0设备写入命令,并使用C/C++;

Ubuntu 如何向ttyACM0设备写入命令,并使用C/C++;,ubuntu,tty,c,c++,read-write,Ubuntu,Tty,C,C++,Read Write,我目前的任务是从一个解码器中检索数据,该解码器监视机器人手臂的6个关节位置。此设备具有USB接口,可作为串行CDC设备运行。ASCII命令集允许主机配置每个轴的分辨率并设置访问方法。每个轴的当前位置以工程单位或原始二进制(转换)输出 以用户定义的速率传输到ASCII)。命令协议类似于USB串行协议(这里是解码器技术手册的链接:) 使用Ubuntu,当我在终端中键入“dmesg”时,这个设备显示为“ttyACM0”设备。我得到的最远的结果是使用“screen/dev/ttyACM0”,这允许我输入

我目前的任务是从一个解码器中检索数据,该解码器监视机器人手臂的6个关节位置。此设备具有USB接口,可作为串行CDC设备运行。ASCII命令集允许主机配置每个轴的分辨率并设置访问方法。每个轴的当前位置以工程单位或原始二进制(转换)输出 以用户定义的速率传输到ASCII)。命令协议类似于USB串行协议(这里是解码器技术手册的链接:)

使用Ubuntu,当我在终端中键入“dmesg”时,这个设备显示为“ttyACM0”设备。我得到的最远的结果是使用“screen/dev/ttyACM0”,这允许我输入这些串行命令并通过终端查看输出信息,但是,这并不能完成我试图实现的任务

我正在尝试编写一些C/C++代码,使程序能够将这些串行命令写入ttyACM0设备,从而检索设备输出的信息数据。该is代码最终将在ROS中使用,以允许使用获得的数据在每个机器人手臂关节中进行位置反馈控制

老实说,这是我在一次微弱的尝试中所能想到的最好的方法,用我收集的信息将其中一个命令写入ttyACM0文件:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    fp = fopen("/dev/ttyACM0", "w");

    if(fp == NULL)
    {
        perror("File failed to open");
        exit(1);
    }

    fprintf(fp, "i");


    fclose(fp);

    return 0;
}
#包括
#包括
int main()
{
文件*fp;
fp=fopen(“/dev/ttyACM0”,“w”);
如果(fp==NULL)
{
perror(“文件打开失败”);
出口(1);
}
fprintf(fp,“i”);
fclose(fp);
返回0;
}

有人知道如何解决这个问题吗?有没有一种方法可以利用代码来完成我在终端中完成的工作,但却满足我的需要?我在论坛上遇到过很多死角,它们只告诉你如何通过终端完成这项工作,或者如何为Arduino及其编译器完成这项工作。我正绞尽脑汁想弄明白这一点,非常感谢您的帮助。

关于POSIX环境中串行链接编程的权威资源是。请注意,对于CDC ACM设备,可以配置的内容不多。即使你尝试了,这个设备也可以很高兴地忽略所有关于波特率、字长等的事情


事实上,对于CDC ACM,你在那里所做的基本上是正确的。然而,stdio的所有缓冲都将妨碍您。自由地添加
fflush
调用将有所帮助。

一个开始的地方是查找串行编程教程和howto。详细信息将针对您的设备,但您需要首先了解使用串行线的一般方法。lcd047是怎么说的。您必须设置波特率、字长(7或8位)、奇偶校验、硬件握手等。从shell中,这些可以通过
stty
命令进行操作,从C开始,通过适当的
ioctl()
/
tcsettr()
,后者的级别更高一些;请参见
man tcsetattr