0

Wire クラスを使用して、2 つの Arduino Unos が I2C を使用して通信します。Wire クラスは値 0 で送信を終了するようです。したがって、バイト 0x01、0x02、0x00、および 0x04 を送信すると、マスターは 0x01、0x02、0xFF、0xFF を受信します。

プロセッサ通信用に設計された通信ネットワークが 0x00 を送信できないのは奇妙に思えます。私が見た I2C の例はすべて ASCII のみを使用しています。ASCII に制限されたプロセッサ間通信は意味がないようです。I2C で何か不足していますか、それとも Arduino Wire クラスの実装上の制限ですか?

主人

void loop() {
  Wire.requestFrom(2, 4); 

  while(Wire.available()) { 
    byte b = (byte) Wire.read(); 
    Serial.println(b); 
  }

  delay(1000);
}

スレーブ

void requestEvent() {
  char bytes[4] = {0x01,0x02,0x00,0x04};
  Wire.write(bytes);
}

結果は 1 2 255 255 です。

その 0x00 が 0x03 だったとき、1 2 3 4 という予想が得られました。

4

2 に答える 2

6

chars の配列をWire.write()...に渡してWireいますNULL。sを送信する場合は、バイトごとに 1 回関数byteを呼び出し、型を渡します。write()byte

または、バージョンを呼び出すこともできますwrite(const uint8_t *, size_t);。/ バイト配列へのポインターを渡しますが、データ配列のサイズも指定する必要があります。

于 2013-03-31T05:54:46.497 に答える