セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

Wire (メンバ関数版)

Wire (メンバ関数を使用する方法)

    メンバ関数を利用した方法は、抽象度が比較的低く、C言語ライブラリで提供されるような一般的なAPI体系に倣っています。二線シリアルバスの操作手続きがより直感的です。

    ただしバスの利用の開始と終了を明示的に意識して記述する必要があります。

    読み込み

    requestFrom()

    size_type requestFrom(
        uint8_t u8address,
        size_type length,
        bool b_send_stop = true)

    指定バイト数分を一括で読み出します。読みだした結果はキューに保存されるため、直後にキューが空になるまで .read() メソッドを呼び出すようにしてください。

    パラメータ解説
    u8address読み出し対象のI2Cアドレス
    length読み出しバイト数
    b_send_stop=truetrue の時、読み込み終了時にSTOPビットを設定する。
    戻り値型 size_type読み出したバイト数。 0 は読み出しの失敗。

    コード例

    int len = Wire.requestFrom(0x70, 6);
    for (int i = 0; i < 6; i++) {
      if (Wire.available()) {
    		  au8data[i] = Wire.read();
        Serial.print(buff[i], HEX);
      }
    }
    // skip the rest (just in case)
    // while (Wire.available()) Wire.read(); // normally, not necessary.
    

    書き出し

    書き出し処理は、beginTransmission() を実行後、write() メソッドにより行います。一連の書き出しが終了したら endTranmission() を呼びます。

    	#define DEV_ADDR (0x70)
    	const uint8_t msg[2] =
    	  {SHTC3_SOFT_RST_H, SHTC3_SOFT_RST_L};
    
    	Wire.beginTransmission(DEV_ADDR);
    	Wire.write(msg, sizeof(msg));
    	Wire.endTransmission();

    beginTransmission()

    void beginTransmission(uint8_t address)

    書き出しの転送を初期化する。書き出し処理終了後、速やかに endTransmission() を呼び出す。

    パラメータ解説
    u8address書き出し対象のI2Cアドレス

    write(value)

    size_type write(const value_type value)

    1バイトの書き出しを行う。

    パラメータ解説
    value書き込むバイト
    戻り値 size_type書き込んだバイト数。0はエラー。

    write(*value, quantity)

    size_type write(
      const value_type* value,
      size_type quantity)

    バイト列の書き出しを行います。

    パラメータ解説
    *value書き込むバイト列
    size_typeバイト数
    戻り値 size_type書き込んだバイト数。0はエラー。

    endTransmission()

    uint8_t endTransmission(bool sendStop = true)

    書き出しの終了処理を行います。

    パラメータ解説
    sendStop = trueSTOPビットを発行します。
    戻り値 uint8_t0: 成功 4: 失敗