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
:実際に温度および圧力の値を取得し、計算を行う。
コメント
コメントを投稿