Driver to read and control a serial (i2c) temperature sensor, The Microchip MCP9808 is the digital sensor to control, can be read it, set its resolution, shutdown and also set alarms.
Dependents: Hotboards_temp_alarms Hotboards_temp_fahrenheit Hotboards_temp_reading_temperature LCD_Temperatura
Hotboards_temp.h
- Committer:
- Hotboards
- Date:
- 2016-03-22
- Revision:
- 1:f850ee1083ba
- Parent:
- 0:83da47b7ed26
File content as of revision 1:f850ee1083ba:
/* Hotboards_temp.h - Driver to read and control a serial (i2c) temperature sensor, The Microchip MCP9808 is the digital sensor to control, can be read it, set its resolution, shutdown and also set alarms. Hotboards eeprom board (http://hotboards.org) Created by Diego Perez, March 19, 2016. Released into the public domain. */ #ifndef Hotboards_Temp_h #define Hotboards_Temp_h #include "mbed.h" #define HT_SENSOR_OFF 0 #define HT_SENSOR_ON 1 typedef enum { Sensor_0 = 0, Sensor_1, Sensor_2, Sensor_3, Sensor_4, Sensor_5, Sensor_6, Sensor_7 } _eSensors; typedef enum { _0p5C = 0, _0p25C, _0p125C, _0p0625C } _eResolution; /** Hotboards_temp class. * Used to read and config Microchip MCP9808 i2c temp sensor * * Example: * @code * #include "Hotboards_temp.h" * * Hotboards_temp sensor( Sensor_7 ); * * int main( void ) * { * Wire.begin( ); * sensor.begin( ); * while(1){ * float val = sensor.read( ); * printf( "temp. %f", val ); * wait(1); * } * } * @endcode */ class Hotboards_temp { public : /** Create Hotboards_temp instance * @param i2c iic peripheral to use with the temp sensor * @param address sensor address (A0,A1 and A2 values) * @param resolution default temperature resoluion (use values from _eResolution enumeration) * * Example: * @code * // instance temp sensor with address 7 and 0.5 resolution (default) * Hotboards_temp sensor( Sensor_7 ); * @endcode */ Hotboards_temp( I2C &i2c, uint8_t address, uint8_t resolution = _0p5C ); /** Detect if the sensor is conected and also set default resolution * @return '1' if a sensor is connected * * Example: * @code * // init sensor and also check if is conected * if( sensor.begin( ) == 1 ){ * // sensor is detected, do something * } * @endcode */ bool init( void ); /** Get temperature from sensor in Celsius degrees * @return The current temperature * * Example: * @code * // init temp sensor (assume sensor is connected) * sensor.begin( ); * // read the current temperaure * float temp = sensor.read( ); * @endcode */ float read( void ); /** Set Tlower and Tupper values and also active ALERT output pin * @param lower lower temperaure value to set ALERT pin * @param upper upper temperaure value to set ALERT pin * * Example: * @code * // set lower nd upper alarm (on setup function) * sensor.setAlarm( 0.0, 10.0 ); * // somewhere else on loop function * // assume we conected pin 5 (arduino) to ALERT pin (sensor) * if( readDigital(5) == 0 ){ * // temp value under lower valur or upper value * } * @endcode */ void setAlarms( float lower, float upper ); /** Disable alarma activation, the function does not clear the previus * alarm values, just disable the ALERT signal * * Example: * @code * // set lower nd upper alarm (on setup function) * sensor.setAlarm( 0.0, 10.0 ); * // disable alarm, ALERt signal is disable * sensor.disableAlarms( ); * @endcode */ void disableAlarms( void ); /** Turn Off/On sensor (low power), after turn it on again, is necesary wait * from 30ms to 250ms (depends on resoluion) to read a valid temperature * @param state shutdown (HT_SENSOR_OFF) or turn on (HT_SENSOR_ON) * * Example: * @code * // lets assume sensor is initialized, so shutdown * sensor.shutdown( HT_SENSOR_OFF ); * // the we can turn it on * sensor.shutdown( HT_SENSOR_ON ); * @endcode */ void shutdown( bool state ); /** set a new resolution, possible values are 0.0625, 0.125, 0.25 and 0.5 * @param resolution use values from _eResolution enumeration (_0p5C, _0p25C, _0p125C and _0p0625C) * * Example: * @code * // lets assume sensor is initialized * sensor.setResolution( _0p0625C ); * // read temperature with the new resolution * float temp = sensor.read( ); * @endcode */ void setResolution( uint8_t resolution ); /** Function to convert Celsius to Farenheit degrees * @param celsius temperature in celsius degrees * * Example: * @code * // read temperature in celsius degrees * float tempC = sensor.read( ); * // convert to farenheit * float tempF = sensor.CelsiusToFarenheit( tempC ); * @endcode */ float CelsiusToFarenheit( float celsius ); /** Function to convert Farenheit to Celsius degrees * @param farenheit temperature in farenheit degrees * * Example: * @code * // convert to celsius a previus farenheit temperature * float tempC = sensor.FarenheitToCelsius( 98.5 ); * @endcode */ float FarenheitToCelsius( float farenheit ); private : uint16_t readReg( uint8_t reg ); void writeReg( uint8_t reg, uint16_t val ); void writeAlarm( uint16_t reg, float temp ); I2C _i2c; uint8_t _address; uint8_t _resolution; }; #endif