BMP280温度センサー・その5(I2Cデバイスクラスに関して)
簡易目次
実際のプログラムに入る前にプロジェクトフォルダーをGitHubに作成しました。
I2Cデバイスのベースとなるクラスは以下の通りとなる。
class CSPI2CDeviceAccessBase
{
friend class CSPI2CManager;
public:
CSPI2CDeviceAccessBase(uint8_t ui8DeviceAddress);
virtual ~CSPI2CDeviceAccessBase();
inline uint8_t GetDeviceAddress()
{
return this->m_ui8DeviceAddress;
}
inline bool GetLoopAccess()
{
return this->m_bLoopAccess;
}
virtual bool AfterProcess();
protected:
CSPI2CDeviceAccessBase * m_pNextAccess;
CSPI2CData m_listDataProcess;
CSPI2CManager * m_pManager;
bool m_bLoopAccess;
uint8_t m_ui8DeviceAddress;
};
このクラスのインスタンスをBMP280温度センサー・その4(I2C通信スレッド)で述べたマネージャークラスに登録することによって、I2Cとの通信が行われることになる。I2Cで送受信するデータはCSPI2CData型のリストにCSPI2CDataElement型のデータを登録することにより行う。CSPI2CDataElement型のデータはCSPI2CDataElementからの派生クラスであるCSPI2CDataRegisterReaderかCSPI2CDataRegisterWriter,
CSPI2CDataCommandWriterを使用する。
BMP280に関して、以下の3つのクラスを定義する
class CSPI2CBMP280ConfigCtrl
:温度センサーのコンフィギュレーションを設定するためのクラス。BMP280のメモリーマップは以下の通りとなっている。
これによると、アドレス番号0xF5および0xF4にはデータの書き込みを行うことが出来る。
0xF4の上位3bitはosrs_tでデータシートによると温度のオーバーサンプリング数とある。
次の3bitはosrs_pで圧力のオーバーサンプリング数
最後の2bitはコントロールパワーモードとある。
0xF5の上位3bitはt_sbとあり、スタンバイ時間のモードとある。
次の2bitはfilterで、IIRフィルターの設定
最後の1bitはインタフェースモードとなる。
CSPI2CBMP280ConfigCtrlクラスのインスタンスを作成し、コンフィグレーションをセットすることにより、BMP280の設定を行うことが出来る。
class CSPI2CBMP280Calib
:BMP280は温度値と圧力値を12bitのバイナリー値で取得できる。このバイナリー値をどのように計算すれば温度(℃)と圧力(Pa)になるかと言う計算式がある。
BMP280はその計算式に与える定数が、センサー毎に異なるようである。それで、BMP280の特定のメモリーから計算用の定数を取得し、温度と圧力を計算する際に使用する必要がある。
CSPI2CBMP280Calibクラスはその定数を取得するために使用する。
class CSPI2CBMP280TempPress
:実際に温度および圧力の値を取得し、計算を行う。

コメント
コメントを投稿