2

Arduino UNO に IOIO ボード ( https://github.com/ytai/ioio/wiki/UART ) に UART 経由で値を送信させようとしています。誰かがロータリー エンコーダーを回したときに、CW の場合は 0、CCW の場合は 1、プレスの場合は 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());
    }
  }

また、Serial.println を介して文字列を渡しながら BufferedReaders を使用してみましたが、多くのクレイジーな文字が Java 側から出力されていました (UTF-8 と ASCII の両方でエンコードを試みました)。

ボーレートは 9600 で一致し、IOIO の 5v RX ピンに接続されており、そのピンは Arduino Uno の TX ピン (ピン 1) に接続されています。

誰かが整数を送受信する簡単な方法を指摘していますか?

4

0 に答える 0