我试图通过UART将Arduino UNO值发送到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传递Strings,但是很多疯狂的角色从Java端获得输出(尝试使用UTF-8和ASCII编码) .

波特率匹配为9600,我在IOIO上的5v RX引脚上,该引脚连接到Arduino Uno上的TX引脚(引脚1) .

有没有人指出一种传输和接收整数的简单方法?