Writing Byte Arrays to serial with Ruby

arduino, ruby, serial-port

Solution

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

But we can have more fun than that (muhahaha...)

class Array
  def chr
    self.map { |e| e.chr }
  end
end

So then:

>> [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"

Problem

I'm not clear on how to write simple byte code arrays with ruby, more-so I'm absolutely stumped on how to use the Ruby SerialPort library, well to be honest I have it working pretty well however I have only been successful in sending ASCII over the serial port. For example it's really simple to write ASCII: ``` @sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200 @sp.write "test" ``` Which obviously writes `test` to that serial device. This works fine and I've been able to get all the expected results sent to a micro-controller (arduino) in this case. The issue is that I need to write output which the serial device will read like so: ``` {0x01,0x09,0x04,0x00, 'f',0xff,0xcc,0x33} ``` I've tried using `str.unpack` but am still unable to produce the desired hex values output as bytes as above. In Java it is simple using it's serial library: ``` byte[] cmd = { 0x01,0x09,0x04,0x00, 'f',(byte)0xff,(byte)0xcc,(byte)0x33 }; serialPort.write( cmd ); ``` How can I output the proper bytecode to my serial device with Ruby?

Original source