使用Ruby将字节数组写入串口

5
我不清楚如何使用Ruby编写简单的字节码数组,更何况我绝对无法理解如何使用Ruby SerialPort库。说实话,我已经成功地将ASCII发送到串口,但是其他类型的数据仍然让我困惑。
例如,编写ASCII非常简单:
@sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200
@sp.write "test"

这显然会向串行设备写入test。这很好用,我已经能够将所有期望的结果发送到一个微控制器(arduino)。问题是我需要编写输出,使得串行设备可以像这样读取:

{0x01,0x09,0x04,0x00, 'f',0xff,0xcc,0x33}

我尝试使用str.unpack,但仍无法像上面的字节一样输出所需的十六进制值。
在Java中,使用其串行库很简单:
byte[] cmd = { 0x01,0x09,0x04,0x00, 'f',(byte)0xff,(byte)0xcc,(byte)0x33 };
serialPort.write( cmd );

我该如何使用Ruby将正确的字节码输出到串行设备?
1个回答

6
@sp.write [32.chr, 7.chr, 8.chr, 65.chr].to_s
@sp.write ["\x01\x09\x04\x00", 'f', "\xff\xcc\x33"].to_s

但是我们可以比这更有趣(嘿嘿嘿……)
class Array
  def chr
    self.map { |e| e.chr }
  end
end

那么,接下来:
>> [1,2,3,65,66,67].chr
=> ["\001", "\002", "\003", "A", "B", "C"]
>> [1,2,3,65,66,67].chr.to_s
=> "\001\002\003ABC"

哇...太棒了。我没想到它可以这么简单。谢谢! - JP Silvashy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接