我正在尝试将USB串行端口适配器的控制位用作通用I / O.这个简单的例子应该将DTR线切换为高电平,然后是低电平。
require 'serialport'
DataBits = 8
StopBits = 1
Parity = SerialPort::NONE
Baud = 38400
port = '/dev/tty.usbserial-A100KXWU'
serial = SerialPort.new(port, 'baud' => Baud, 'data_bits' => DataBits, 'stop_bits' => StopBits, 'parity' => Parity)
serial.flow_control = SerialPort::HARD
loop do
p serial.signals
sleep(1)
serial.dtr = (serial.dtr + 1) % 2
end
输出:
{"rts"=>1, "dtr"=>1, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
{"rts"=>1, "dtr"=>0, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
{"rts"=>1, "dtr"=>1, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
{"rts"=>1, "dtr"=>0, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0}
就Ruby而言,serial.dtr
正在发生变化,但DTR引脚的输出电压没有变化。它是一个恒定的+ 7V。
此外,serial
实例无法读取应用于来自其他硬件设备的CTS,DSR或DCD的任何更改。
它以sudo
权限运行,因此它不是权限问题。这是在OS X 10.10优胜美地。
答案 0 :(得分:0)
根据http://www.rubydoc.info/gems/serialport/SerialPort:flow_control=
注意:SerialPort :: HARD使用RTS / CTS握手。不支持DSR / DTR。
答案 1 :(得分:0)
我正在回答我自己的问题。事实证明,Apple提供的FTDI驱动程序是错误的。他们无法访问控制信号。
我安装了the official FTDI VCP drivers(编写本文时为2.3版),重新启动,现在我可以完全控制。