I2C 接続の温度センサ ADT7410 用のライブラリ. Library for temperature sensor ADT7410 connected using I2C interface.
Dependents: Mbed2_ConnectTestAll Demo_ADT7410
ADT7410.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2020-04-16
- Revision:
- 7:990e3c54ac51
- Parent:
- 6:438204ab1793
File content as of revision 7:990e3c54ac51:
//-------------------------------------------------------------- // ADT7410 クラスのメンバ関数の定義 // // 2020/04/16, Copyright (c) 2020 MIKAMI, Naoki //-------------------------------------------------------------- #include "ADT7410.hpp" namespace Mikami { // コンストラクタ ADT7410::ADT7410(PinName sda, PinName scl, uint8_t addr) : ADDR_(addr), i2cPtr_(new I2C(sda, scl)), i2c_(*i2cPtr_) { Reset(); } // 外部の I2C オブジェクトを与えるコンストラクタ ADT7410::ADT7410(I2C &i2c, uint8_t addr) : ADDR_(addr), i2cPtr_(NULL), i2c_(i2c) { Reset(); } // コンフィギュレーション・レジスタの設定 // ADT7410 のデータシートの Figure 15 参照 void ADT7410::SetConfig(char val) const { TxRegAddr(CONFIG_, true); i2c_.write(val); i2c_.stop(); } // 温度の読み込み // ADT7410 のデータシートの Figure 18 参照 float ADT7410::Read() const { TxRegAddr(TEMPER_, true); i2c_.start(); i2c_.write(ADDR_ | 0x01); uint8_t valH = i2c_.read(1); int16_t value = (valH << 8) | i2c_.read(0); i2c_.stop(); if ( (GetConfig() & 0x80) == 0x00 ) value &= 0xfff8; // 分解能: 13 ビットの場合 return value/128.0f; } // リセット // ADT7410 のデータシート Rev.A の p.19 参照 void ADT7410::Reset() const { TxRegAddr(RESET_); wait_ms(250); // 分解能: 13 ビット,continuous 変換モード に設定 SetConfig(0x00); } // ADT7410 内部レジスタのアドレスの送信 void ADT7410::TxRegAddr(uint8_t reg, bool repeated) const { i2c_.start(); i2c_.write(ADDR_); i2c_.write(reg); if (!repeated) i2c_.stop(); } // ADT7410 の内部レジスタの 1 バイトの読み込み uint8_t ADT7410::GetReg(Reg addr) const { TxRegAddr(addr, true); i2c_.start(); i2c_.write(ADDR_ | 0x01); uint8_t val = i2c_.read(0); i2c_.stop(); return val; } }