У меня есть целые числа от 0 до 255, и мне нужно передать их в OutputStream, закодированный как неподписанные байты.Я пытался преобразовать, используя маску, например, так, но если я = 1, другой конец моего потока (последовательное устройство ожидает uint8_t) думает, что я отправил целое число без знака = 6.
OutputStream out;
public void writeToStream(int i) throws Exception {
out.write(((byte)(i & 0xff)));
}
Я разговариваю с Arduino на /dev/ttyUSB0
, используя Ubuntu, если это делает вещи более или менее интересными.
Вот код Arduino:
uint8_t nextByte() {
while(1) {
if(Serial.available() > 0) {
uint8_t b = Serial.read();
return b;
}
}
}
У меня также есть код Python, который прекрасно работает с кодом Arduino, и Arduino с радостью получает правильное целое число, если я использую этот код в Python:
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, чтобы избежать сложности при решении этой проблемы.