投稿

5月, 2021の投稿を表示しています

BMP280温度センサー・その6(メインルーチン)

簡易目次    実際のプログラムに入る前にプロジェクトフォルダーをGitHubに作成しました。   GitHubプロジェクトフォルダ 前回までの説明で(ほとんど説明してないけど)作成した、デバイスクラスやデバイスマネージャークラスを実際に使ってみます。 メインプログラムはTestProject/00_TestI2C.cppとなっており、ソースは以下の通りです。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <linux/i2c-dev.h> #include <fcntl.h> #include <sys/ioctl.h> #include "../../SPI2C/BMP280/BMP280.h" int main() { SPI2C::CSPI2CManager i2cManager("/dev/i2c-1"); //Control & Configuration SPI2C::CSPI2CBMP280ConfigCtrl * pConfigCtrl = new SPI2C::CSPI2CBMP280ConfigCtrl( 0x76 ); pConfigCtrl->SetCtrlOsrsP(SPI2C::CSPI2CBMP280ConfigCtrl::OsrsP_x16); pConfigCtrl->SetSender(); i2cManager.AddDeviceAccess( pConfigCtrl ); SPI2C::CSPI2CBMP280TempPress * pTempPress = new SPI2C::CSPI2CBMP280TempPress( 0x76 ); SPI2C::CSPI2CBMP280Calib * pCalib = new SPI2C::CSPI2CBMP280Calib( 0x76 ); pCalib->SetTempPressInstance( pTempPress ); i2cManager

BMP280温度センサー・その5(I2Cデバイスクラスに関して)

イメージ
簡易目次    実際のプログラムに入る前にプロジェクトフォルダーをGitHubに作成しました。   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のメモリーマップは以下の通りとなっ