2009-10-15 13 views
5

Non sono chiaro su come scrivere array di byte code con ruby, more-so Sono assolutamente convinto su come utilizzare la libreria Ruby SerialPort, beh, ad essere sincero, ho funziona piuttosto bene ma ho avuto successo solo nell'invio di ASCII sulla porta seriale.Scrittura di array di byte in serie con Ruby

Per esempio è davvero semplice da scrivere ASCII:

@sp = SerialPort.new "/dev/tty.usbserial-A6004cNN", 19200 
@sp.write "test" 

Quali scrive ovviamente test a quel dispositivo seriale. Funziona bene e sono stato in grado di ottenere tutti i risultati attesi inviati a un microcontrollore (arduino) in questo caso. Il problema è che ho bisogno di scrivere uscita che il dispositivo seriale leggerà modo:

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

Ho provato con str.unpack ma sono ancora in grado di produrre l'output valori esadecimali desiderato come byte come sopra.

In Java è semplice usando il suo biblioteca di serie:

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

come posso uscita il corretto bytecode al mio dispositivo seriale con Ruby?

risposta

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 

Ma possiamo avere più divertente di quella (muhahaha ...)

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

Dunque:

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

wow ... fantastico. Non avevo realizzato che potesse essere così semplice. Grazie! –

Problemi correlati