Arduino メモ

## Wireライブラリ
ArduinoでI2C通信をするためのライブラリ


##### 定数
~~~
int num=3; 
// 型 名前=値
~~~


##### ピンモード指定
~~~
pinMode(num, OUTPUT);
//pinMode(ピン番号, ピンの状態)
~~~


##### 
~~~
digitalWrite(num, HIGH);
//digitalWrite(ピン番号, アウトプットの状態)
~~~


##### 遅らせる
~~~
delay(5000);
//delay(待つ時間ミリ秒);
~~~

##### 
~~~

~~~
##### 
~~~

~~~

##### 
~~~

~~~

##### 
~~~

~~~

##### 
~~~

~~~

##### 
~~~

~~~


##### Wireライブラリをインクルードする
~~~
include <Wire.h>
~~~

##### Wireオブジェクトを初期化する
~~~
Wire.begin();
Wire.begin(sda, scl[, freq]);
~~~
パラメータを指定しない場合、SDAは21番ピン、SCLは22番ピンになる。
`sda` : SDAのピン番号
`scl` : SCLのピン番号
`freq` : I2C通信の周波数（デフォルトは100Hz）
`戻り値` : なし

#### データ送信の流れ
送信の準備をする➡送信キューにデータを送る➡送信キューのデータを実際に送信する
##### アドレスで示されるデバイスへのI2C送信の準備をする
~~~
Wire.beginTransmission(address);
~~~
`address` : I2Cアドレス
`戻り値` : なし

##### I2Cで送信するデータをキューイングする
~~~
Wire.write(value);
Wire.write(string);
Wire.write(data, length);
~~~
`value` : 1バイトのデータを送る
`string` : stringで示される連続バイトを送る
`data` : 複数バイトの配列
`length` : 送信するバイト数
`戻り値` : キューイングしたバイト数

##### 送信キューのデータを送信する
~~~
Wire.endTransmission();
Wire.endTransmission(stop);
~~~
`stop` : trueの場合、送信後、STOPメッセージを送ってI2Cバスを開放する
falseの場合、開放しない。デフォルトはtrue。
`戻り値` : 0 成功、1 データが送信バッファより長い、2 アドレス送信時にNACKを受信、3 データ送信時にNACKを受信、4 その他エラー

#### 要求したデータを読み込みたい場合
デバイスにデータを要求、受信➡データを読み出す

##### I2Cアドレスで指定するデバイスにデータを要求する
~~~
Wire.requestFrom(address, bytes);
Wire.requestFrom(address, bytes, stop);
~~~
`address` : I2Cアドレス
`bytes` : 要求するデータバイト数
`stop` : tureの場合、送信後STOPメッセージを送って、I2Cバスを開放する。falseの場合、開放しない。デフォルトはtrue。
`戻り値` : 読んだデータのバイト数

##### Wire.requestFrom関数で要求したデータを読む
~~~
Wire.read();
~~~
`戻り値` : 読んだデータ

~~~
$ tracert www.cs.princeton.edu

wwwprx.cs.princeton.edu [2001:260:306:b::8070:883d] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1     3 ms    28 ms     1 ms  ntt.setup [2404:7a81:1:1a00:124b:46ff:fed4:573]
  2     *        *        *     要求がタイムアウトしました。
  3     *        *        *     要求がタイムアウトしました。
  4     *        *        *     要求がタイムアウトしました。
  5     8 ms     7 ms    17 ms  2001:260:700:483::483:1
  6     *        *        *     要求がタイムアウトしました。
  7    27 ms     7 ms     7 ms  2001:260:306:7::7:1
  8     8 ms     7 ms     7 ms  2001:260:306:b::7a84:e2
  9    12 ms     7 ms    10 ms  ae-13.a00.tokyjp04.jp.bb.gin.ntt.net [2001:260:306:b::3dc8:50fd]
 10    17 ms     7 ms     7 ms  ae-8.r01.tokyjp08.jp.bb.gin.ntt.net [2001:260:306:b::81fa:244]
 11    10 ms     7 ms     7 ms  ae-19.r30.tokyjp05.jp.bb.gin.ntt.net [2001:260:306:b::81fa:682]
 12    96 ms    95 ms    97 ms  ae-5.r24.sttlwa01.us.bb.gin.ntt.net [2001:260:306:b::81fa:48e]
 13   172 ms   157 ms   159 ms  ae-11.r20.nwrknj03.us.bb.gin.ntt.net [2001:260:306:b::81fa:6b0]
 14   159 ms   157 ms   156 ms  ae-1.r00.nwrknj03.us.bb.gin.ntt.net [2001:260:306:b::81fa:635]
 15   159 ms   156 ms   157 ms  ae-0.njedge.nwrknj03.us.bb.gin.ntt.net [2001:260:306:b::a88f:e4cd]
 16   183 ms   153 ms   154 ms  2001:260:306:b::829c:22f6
 17   178 ms   157 ms   157 ms  2001:260:306:b::829c:fb32
 18   152 ms   152 ms   151 ms  fw-border-hpcrc-router.princeton.edu [2001:260:306:b::cc99:30fe]
 19   159 ms   153 ms   151 ms  rtr-core-west-router.princeton.edu [2001:260:306:b::8070:c0d]
 20   188 ms   158 ms   158 ms  csgate.princeton.edu [2001:260:306:b::8070:c22]
 21     *        *        *     要求がタイムアウトしました。
 22     *        *        *     要求がタイムアウトしました。
 23     *        *        *     要求がタイムアウトしました。
 24     *        *        *     要求がタイムアウトしました。
 25     *        *        *     要求がタイムアウトしました。
 26     *        *        *     要求がタイムアウトしました。
 27     *        *        *     要求がタイムアウトしました。
 28     *        *        *     要求がタイムアウトしました。
 29     *        *        *     要求がタイムアウトしました。
 30     *        *        *     要求がタイムアウトしました。
~~~