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にフォールバックします。