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) に接続されています。
誰かが整数を送受信する簡単な方法を指摘していますか?