我正在尝试让 Arduino UNO通过 UART将值发送到 IOIO 板( https://github.com/ytai/ioio/wiki/UART )。当有人转动旋转编码器时,我希望它发送 0 表示 CW,1 表示 CCW,2 表示按下。一切都在 Arduino 的串行监视器中检查,但我不知道如何读取这些值并在 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)。
有没有人指出发送和接收整数的简单方法?