Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MCP9808.hpp
- Committer:
- Jmfox24
- Date:
- 2017-01-09
- Revision:
- 1:7e98ef2bd303
- Parent:
- 0:f06580426072
- Child:
- 2:4f8e1fb852d3
File content as of revision 1:7e98ef2bd303:
#ifndef MCP9808_HPP
#define MCP9808_HPP
#include <stdint.h>
#include "mbed.h"
/** A driver interface for the Microchip MCP9808 digital temperature sensor
*
* Example:
* @code
*
* #include "mbed.h"
*
* MCP9808 sensor(I2C_SDA, I2C_SCL, 0x30);
*
* int main() {
* while (true) {
* sensor.wake();
* osDelay(250);
* printf("Current temperature: %f °C\r\n", sensor.get_temperature());
* sensor.sleep();
* osDelay(1000);
* }
* }
* @endcode
*/
class MCP9808
{
public:
/** Register definitions
*/
enum Register {
MCP9808_REG_RFU = 0x00,
MCP9808_REG_CFG = 0x01,
MCP9808_REG_ALERT_TEMP_UPPER = 0x02,
MCP9808_REG_ALERT_TEMP_LOWER = 0x03,
MCP9808_REG_CRIT_TEMP = 0x04,
MCP9808_REG_TEMP = 0x05,
MCP9808_REG_MFG_ID = 0x06,
MCP9808_REG_DEV_ID = 0x07,
MCP9808_REG_RES = 0x08,
};
/** Config register flags
*/
enum ConfigFlag {
MCP9808_CFG_FLAG_ALERT_MODE_INT = (1 << 0),
MCP9808_CFG_FLAG_ALERT_POL_HIGH = (1 << 1),
MCP9808_CFG_FLAG_ALERT_CRIT_ONLY = (1 << 2),
MCP9808_CFG_FLAG_ALERT_ENABLE = (1 << 3),
MCP9808_CFG_FLAG_ALERT_ASSERT_ENABLE = (1 << 4),
MCP9808_CFG_FLAG_INT_CLR = (1 << 5),
MCP9808_CFG_FLAG_WIN_LOCKED = (1 << 6),
MCP9808_CFG_FLAG_CRIT_LOCKED = (1 << 7),
MCP9808_CFG_FLAG_SHDN_ENABLED = (1 << 8),
};
/** Create an MCP9808 using the specified pins for I2C and specified I2C
* address
*
* @param sda I2C SDA pin to connect to
* @param scl I2C SCL pin to connect to
* @param addr I2C address for the sensor
*/
MCP9808(PinName sda, PinName scl, int addr);
virtual ~MCP9808();
/** Puts the sensor into (low-power) shutdown mode
*
* @returns 0 on success, negative on error
*/
int sleep();
/** Puts the sensor into continuous conversion mode
*
* @returns 0 on success, negative on error
*/
int wake();
/** Returns the current ambient temperature in degrees Celsius
*
* @returns A floating-point value representing the current ambient
* temperature in degrees Celsius
*/
float get_temperature();
private:
I2C _i2c;
int _addr;
/** Reads a 16-bit register from the sensor
*
* @param reg The register to read from
* @param value A pointer to the value to read into
* @returns 0 on success, negative on error
*/
int reg_read(uint8_t reg, uint16_t *value);
/** Writes a 16-bit register into the sensor
*
* @param reg The register to read into
* @param value The value to write
* @returns 0 on success, negative on error
*/
int reg_write(uint8_t reg, uint16_t value);
/** Sets or clears a flag from the config register
*
* @param flag The flag to modify
* @param v The flag state (true = set, false = clear)
* @returns 0 on success, negative on error
*/
int set_cfg_flag(uint16_t flag, bool v);
};
#endif /* MCP9808_HPP */