1

0から255までの整数があり、それらを符号なしバイトとしてエンコードされたOutputStreamに渡す必要があります。このようなマスクを使用して変換しようとしましたが、i = 1の場合、ストリームのもう一方の端(uint8_tを期待するシリアルデバイス)は、符号なし整数=6を送信したと見なします。

OutputStream out;
public void writeToStream(int i) throws Exception {
    out.write(((byte)(i & 0xff)));
}

/dev/ttyUSB0これが多かれ少なかれ面白くなるなら、私はUbuntuを使ってArduinoと話している。

Arduinoのコードは次のとおりです。

uint8_t nextByte() {
    while(1) {
    if(Serial.available() > 0) {
        uint8_t b =  Serial.read();
      return b;
     }
    }
}

また、Arduinoコードでうまく機能するPythonコードもいくつかあります。このコードをPythonで使用すると、Arduinoは正しい整数を喜んで受け取ります。

class writerThread(threading.Thread): 
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
    def run(self):
        while True:
            input = raw_input("[W}Give Me Input!")
            if (input == "exit"):
               exit("Goodbye");
            print ("[W]You input %s\n" % input.strip())
            fval = [ int(input.strip()) ]
            ser.write("".join([chr(x) for x in fval]))

最終的にはScalaでもこれを実行したいと思いますが、この問題を解決する間、複雑さを回避するためにJavaにフォールバックします。

4

2 に答える 2

2

ここが欲しいだけだと思いますout.write(i)。下位8ビットのみがint引数から書き込まれますi

于 2011-03-20T03:46:21.923 に答える
0

キャストしてからマスクします。((byte)(i)&0xff)

しかし、それ以来、何かが非常に奇妙です。

(dec)8-(binary)1000
(dec)6-(binary)0110

[編集]
1(バイナリ)0001を送信すると、Arduinoは6(バイナリ)0110をどのように受信しますか?
[/編集]

于 2011-03-20T03:43:50.640 に答える