我试图在Odroid-U2上用C ++代码控制伺服器。我使用Usb-Serial线将LynxMotion的SSC-32伺服驱动器连接到Odroid。
简单的串行命令控制伺服系统,例如“#n Puuu”,然后是回车,其中n =伺服的引脚编号,uuu =脉冲宽度。我可以在使用Odroid的PUTTY时控制伺服系统,但是在使用C ++代码控制伺服系统时遇到了问题。例如,在我的代码中,我执行以下操作:
fstream f;
f.open("/dev/ttyUSB0");
f << "#0 P600\r";
f.close();
有一段时间,我能够运行这段代码并且它适当地摆动伺服,但现在当我尝试运行此代码时,终端卡住了并且仍然挂起。我将问题缩小到f.open(“/ dev / ttyUSB0”)行,这会阻止代码运行。我假设我需要以某种方式配置USB端口。我知道我需要一个115200的波特率,并相应地设置它,但我是一个Ubuntu n00b,所以我不确定我需要什么类型的配置。
我的Linux版本是Linaro 12.11。
当我键入stty时,非默认配置集似乎是:
speed 115200 baud; line = 0;
-brkint ixoff -imaxbel
-iexten
答案 0 :(得分:1)
您不能依赖串口的默认设置(并且您不应该尝试使用stty在程序之外设置它们)。您必须在程序中编写代码才能正确设置串口。为此,你必须使用像tcsetattr / tcgetattr,cfsetspeed等函数,参见man termios。
此外,fstream可能无法访问要使用的正确open()函数参数,因为在UNIX上打开串行端口应该使用O_NOCTTY标志。