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たが、上記のようにバイトとして出力される目的の 16 進数値をまだ生成できません。

Java では、シリアル ライブラリを使用すると簡単です。

byte[] cmd = { 0x01,0x09,0x04,0x00, 'f',(byte)0xff,(byte)0xcc,(byte)0x33 };
serialPort.write( cmd );

Rubyでシリアルデバイスに適切なバイトコードを出力するにはどうすればよいですか?

4

1 に答える 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"
于 2009-10-15T04:47:01.977 に答える