I2C 接続の温度センサ ADT7410 用のライブラリ. Library for temperature sensor ADT7410 connected using I2C interface.

Dependents:   Mbed2_ConnectTestAll Demo_ADT7410

ADT7410.hpp

Committer:
MikamiUitOpen
Date:
2020-04-16
Revision:
7:990e3c54ac51
Parent:
6:438204ab1793

File content as of revision 7:990e3c54ac51:

//------------------------------------------------------------------
//  温度センサ ADT7410 用の ADT7410 クラスのヘッダ
//      温度の分解能のデフォルト値: 13 ビット
//
//  割込みサービス・ルーチン内に記述した場合に動作しない点を修正した
//  このプログラムを作った際の mbed のリビジョン:Rev.172
//
//  2020/04/16, Copyright (c) 2020 MIKAMI, Naoki
//------------------------------------------------------------------

#ifndef ADT7410_HPP
#define ADT7410_HPP

#include "mbed.h"

namespace Mikami
{
    class ADT7410
    {
    public:
        // デフォルト・コンストラクタ
#if defined(STM32F4) || defined(STM32L0) || defined(__STM32F3xx_H)
        ADT7410(PinName sda = D14,      // SDA
                PinName scl = D15,      // SCL
                uint8_t addr = 0x90);   // I2C bus address
// デフォルト・コンストラクタは Nucleo のみ
#else
        ADT7410(PinName sda,            // SDA
                PinName scl,            // SCL
                uint8_t addr = 0x90);   // I2C bus address
#endif
        // 外部の I2C オブジェクトを与えるコンストラクタ
        ADT7410(I2C &i2c,               // 外部の I2C オブジェクト
                uint8_t addr = 0x90);   // I2C bus address

        // デストラクタ
        virtual ~ADT7410()
        {   if (NULL != i2cPtr_) delete i2cPtr_;    }

        // コンフィギュレーション・レジスタの設定
        void SetConfig(char val) const;

        // コンフィギュレーション・レジスタの読み込み
        // ADT7410 のデータシートの Figure 17 参照
        uint8_t GetConfig() const { return GetReg(CONFIG_); }

        // 温度の読み込み
        virtual float Read() const;
        
        // Read() の代わりに使える演算子
        virtual operator float() const { return Read(); }

        // リセット
        void Reset() const;

    protected:
        const uint8_t ADDR_;    // ADT7410 の左詰めのアドレス

        // ADT7410 の内部のレジスタのアドレス
        enum Reg { TEMPER_ = 0x00,  // 温度レジスタの上位バイト
                   ST_     = 0x02,  // ステータス・レジスタ
                   CONFIG_ = 0x03,  // コンフィギュレーション・レジスタ
                   ID_     = 0x0B,  // ID, 0xCX
                   RESET_  = 0x2F}; // ソフトウェア・リセット

        // ADT7410 内部レジスタのアドレスの送信
        // "STOP" を送らずにふたたび "START" を送る,つまりリスタート・コンディションに
        // する場合は,"repeated" を "true" にする
        void TxRegAddr(uint8_t reg, bool repeated = false) const;
        
        // ステータス・レジスタの読み込み
        uint8_t GetStatus() const { return GetReg(ST_); }

        // ADT7410 の内部レジスタの 1 バイトの読み込み
        uint8_t GetReg(Reg addr) const;

    private:
        I2C *const i2cPtr_; // I2C オブジェクトのポインタ

    protected:
        I2C &i2c_;          // I2C オブジェクトの参照

    private:
        // コピー・コンストラクタと代入演算子関数の禁止
        ADT7410(const ADT7410&);
        ADT7410& operator=(const ADT7410&);
    };
}
#endif  // ADT7410_HPP