initial commit
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# MSA301ForStuduino
|
||||
|
||||
Adafruit MSA301 ライブラリ v1.1.0 を、株式会社アーテックが Studuino 向けに改変したものです。
|
||||
MSA301 / MSA311 加速度センサーを I2C 経由で読み出します。
|
||||
|
||||
オリジナル: https://github.com/adafruit/Adafruit_MSA301
|
||||
オリジナルのライセンス(BSD)は `license.txt` を参照してください。
|
||||
|
||||
本ライブラリは Adafruit が配布する公式版とは互換性がありません。
|
||||
公式版の `Adafruit_MSA301` と同時にインストールしても衝突しないよう、
|
||||
ライブラリ名・フォルダ名・ファイル名・インクルードガードを変更しています。
|
||||
|
||||
## 使い方
|
||||
|
||||
```cpp
|
||||
#include <MSA301ForStuduino.h>
|
||||
|
||||
Adafruit_MSA311 msa; // MSA311 (I2C 0x62)
|
||||
// Adafruit_MSA301 msa; // MSA301 (I2C 0x26)
|
||||
|
||||
void setup() {
|
||||
Wire.begin();
|
||||
if (!msa.begin()) {
|
||||
// センサーが見つからない
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
msa.read();
|
||||
// msa.x, msa.y, msa.z
|
||||
}
|
||||
```
|
||||
|
||||
依存ライブラリは `BusIOForStuduino` のみです。
|
||||
Adafruit Unified Sensor および Adafruit SSD1306 は必要ありません。
|
||||
|
||||
## オリジナルからの変更点
|
||||
|
||||
### 1. ライブラリ名・ファイル名の変更
|
||||
|
||||
公式版との衝突を避けるため、次のように改名しました。クラス名は変更していません。
|
||||
|
||||
| オリジナル | 本ライブラリ |
|
||||
|:--|:--|
|
||||
| `Adafruit_MSA301`(フォルダ) | `MSA301ForStuduino` |
|
||||
| `Adafruit_MSA301.h` | `MSA301ForStuduino.h` |
|
||||
| `Adafruit_MSA301.cpp` | `MSA301ForStuduino.cpp` |
|
||||
| `ADAFRUIT_MSA301_H`(インクルードガード) | `MSA301FORSTUDUINO_H` |
|
||||
| `name=Adafruit MSA301` | `name=MSA301ForStuduino` |
|
||||
|
||||
### 2. Adafruit Unified Sensor への依存を削除
|
||||
|
||||
`Adafruit_MSA301` クラスの `Adafruit_Sensor` 継承を外し、`getEvent()` と
|
||||
`getSensor()`、`sensors_event_t` を用いる API を削除しました。
|
||||
ATmega168(SRAM 1KB)ではメモリに余裕がないためです。
|
||||
|
||||
### 3. 未使用 API の削除
|
||||
|
||||
Studuino が使用しない設定用 API(`setDataRate()` / `getDataRate()` /
|
||||
`setPowerMode()` / `getPowerMode()` / `setBandwidth()` / `getBandwidth()` /
|
||||
`setRange()` / `getRange()` / `setResolution()` / `getResolution()` /
|
||||
`enableAxes()` / `setClick()` / `enableInterrupts()` /
|
||||
`getMotionInterruptStatus()` など)と、対応する enum 定義を削除しました。
|
||||
これらの設定は `begin()` の中で固定値(125Hz / 250Hz / ±2G / 8bit /
|
||||
ノーマルモード)を直接書き込む形に置き換えています。
|
||||
|
||||
### 4. Adafruit_MSA311 クラスの追加
|
||||
|
||||
MSA311(I2C アドレス `0x62`)に対応する `Adafruit_MSA311` クラスを追加しました。
|
||||
`Adafruit_MSA301` を継承し、既定 I2C アドレスのみが異なります。
|
||||
|
||||
### 5. begin() を複数回呼び出せるよう修正
|
||||
|
||||
オリジナルの `begin()` は呼ばれるたびに `Adafruit_I2CDevice` を `new` していました。
|
||||
Studuino のセンサー値確認モードはセンサーの抜き差しからの復帰のため
|
||||
一定周期で `begin()` を呼び直す設計になっており、この実装のままでは
|
||||
呼び出しのたびにメモリリークが発生し、SRAM 1KB の ATmega168 では
|
||||
数十秒で枯渇して動作が破綻します。
|
||||
|
||||
そのため、確保済みの場合は再確保しないよう変更しました。
|
||||
あわせて、コンストラクタで `i2c_dev` を `nullptr` に初期化しています。
|
||||
|
||||
```cpp
|
||||
Adafruit_MSA301::Adafruit_MSA301() : i2c_dev(nullptr) {}
|
||||
|
||||
bool Adafruit_MSA301::begin(uint8_t i2c_address, TwoWire *wire) {
|
||||
if (i2c_dev == nullptr) {
|
||||
i2c_dev = new Adafruit_I2CDevice(i2c_address, wire);
|
||||
}
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
なお、この変更により `i2c_dev` は初回の `begin()` で確保された I2C アドレスを
|
||||
保持し続けます。2回目以降の `begin()` に渡した `i2c_address` は無視されます。
|
||||
|
||||
### 6. 配布物からの除外
|
||||
|
||||
ビルドに不要なファイルを削除しました(`examples/`、`assets/`、
|
||||
`MSA301-V1.0-ENG.PDF`、`.github/`、`.travis.yml`、`code-of-conduct.md`)。
|
||||
|
||||
`examples/` は上記 2. と 3. の API 削除により、そのままではコンパイルが
|
||||
通らなくなっていたため削除しています。
|
||||
Reference in New Issue
Block a user