我正在尝试让Arduino UNO通过UART向IOIO板(https://github.com/ytai/ioio/wiki/UART)发送值。当有人转动旋转编码器时,我希望它为CW发送0,为CCW发送1,为按下发送2。所有内容都从Arduino的Serial Monitor中检出,但我不知道如何读取这些值并正确地在Java端解析它们。这一切都来自看似随机的数字,有时偶尔会出现正确的数字。
我在Arduino方面尝试了这两种方法:
Serial.write(1);
byte data[] = {1};
Serial.write(data, 1);
Serial.write也会自动写入引脚1,因此无需创建SoftwareSerial对象。
在Java端阅读本文时,我只是 255,偶尔会得到正确的数字,偶尔会有0到255之间的随机数:
@Override
public void connect() throws ConnectionLostException {
try{
// rx pin = 6
mUart = ioio_.openUart(RX_PIN, IOIO.INVALID_PIN, 9600, Parity.NONE, StopBits.ONE);
mInput = mUart.getInputStream();
}
catch(ConnectionLostException e){
Log.e(TAG, "connection lost:" + e.getMessage());
ioio_.disconnect();
throw e;
}
}
@Override
public void loop(int loopCount) throws ConnectionLostException {
try{
byte[] response = new byte[1];
int read = mInput.read();
}catch(IOException e){
Log.d(TAG, "error: " + e.getMessage());
}
}
我也尝试过使用BufferedReaders,同时通过Serial.println传递字符串,但是许多疯狂的字符从Java端获得输出(尝试使用UTF-8和ASCII编码)。
波特率匹配在9600,而我在IOIO上的5v RX引脚上,并且该引脚连接到Arduino Uno上的TX引脚(引脚1)。
有没有人指出一种简单的传输方式&收到一个整数?