2

我正在尝试让 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)。

有没有人指出发送和接收整数的简单方法?

4

0 回答 0