A feature complete driver for the LM75B temperature sensor from NXP.
Dependents: app-board-TempAlarm LM75B IoTWorkshopSensors EduRobot ... more
LM75B.h
- Committer:
- neilt6
- Date:
- 2013-07-31
- Revision:
- 1:3da8df4319e8
- Parent:
- 0:557a92280097
- Child:
- 2:9ecc39b2ca70
File content as of revision 1:3da8df4319e8:
/* Copyright (c) 2013 Neil Thiessen, MIT License * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software * and associated documentation files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, publish, distribute, * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LM75B_H #define LM75B_H #include "mbed.h" //i2c address definitions #define LM75B_A0 (0x48 << 1) #define LM75B_A1 (0x49 << 1) #define LM75B_A2 (0x4A << 1) #define LM75B_A3 (0x4B << 1) #define LM75B_A4 (0x4C << 1) #define LM75B_A5 (0x4D << 1) #define LM75B_A6 (0x4E << 1) #define LM75B_A7 (0x4F << 1) //i2c register definitions #define LM75B_REG_TEMP 0x00 #define LM75B_REG_CONF 0x01 #define LM75B_REG_THYST 0x02 #define LM75B_REG_TOS 0x03 //Power mode enumeration typedef enum { LM75B_Power_Normal, LM75B_Power_Shutdown } LM75B_Power_t; //OS mode enumeration typedef enum { LM75B_OS_Comparator, LM75B_OS_Interrupt } LM75B_OS_Mode_t; //OS polarity enumeration typedef enum { LM75B_OS_ActiveLow, LM75B_OS_ActiveHigh } LM75B_OS_Polarity_t; //OS fault queue enumeration typedef enum { LM75B_OS_FaultQueue_1, LM75B_OS_FaultQueue_2, LM75B_OS_FaultQueue_4, LM75B_OS_FaultQueue_6 } LM75B_OS_FaultQueue_t; /** LM75B class. * Used for controlling an LM75B temperature sensor connected via I2C. * * Example: * @code * #include "mbed.h" * #include "LM75B.h" * * Serial pc(USBTX, USBRX); * LM75B sensor(p28, p27, LM75B_A0); * * int main() { * while (1) { * //Read the temperature * float temp = sensor.getTemp(); * * //Print the temperature * pc.printf("Temp = %.3f\n", temp); * * //Sleep for 0.5 seconds * wait(0.5); * } * } * @endcode */ class LM75B { public: /** Create an LM75B object connected to the specified I2C pins with the specified I2C slave address * * @param sda I2C data pin * @param scl I2C clock pin * @param addr I2C slave address */ LM75B(PinName sda, PinName scl, int addr); /** Get the current power mode of the LM75B * * @returns The current power mode as an LM75B_OS_Mode_t enum. */ LM75B_Power_t getPowerMode(void); /** Set the power mode of the LM75B * * @param mode The new power mode as an LM75B_OS_Mode_t enum. */ void setPowerMode(LM75B_Power_t mode); /** Get the current OS pin mode of the LM75B * * @returns The current OS pin mode as an LM75B_OS_Mode_t enum. */ LM75B_OS_Mode_t getOSMode(void); /** Set the OS pin mode of the LM75B * * @param mode The new OS pin mode as an LM75B_OS_Mode_t enum. */ void setOSMode(LM75B_OS_Mode_t mode); /** Get the current OS pin polarity of the LM75B * * @returns The current OS pin polarity as an LM75B_OS_Polarity_t enum. */ LM75B_OS_Polarity_t getOSPolarity(void); /** Set the OS pin polarity of the LM75B * * @param polarity The new OS pin polarity as an LM75B_OS_Polarity_t enum. */ void setOSPolarity(LM75B_OS_Polarity_t polarity); /** Get the current OS pin fault queue length of the LM75B * * @returns The current OS pin fault queue length as an LM75B_OS_FaultQueue_t enum. */ LM75B_OS_FaultQueue_t getOSFaultQueue(void); /** Set the OS pin fault queue length of the LM75B * * @param queue The new OS pin fault queue length as an LM75B_OS_FaultQueue_t enum. */ void setOSFaultQueue(LM75B_OS_FaultQueue_t queue); /** Get the current alert temperature threshold of the LM75B * * @returns The current alert temperature threshold as a float. */ float getAlertTemp(void); /** Set the alert temperature threshold of the LM75B * * @param temp The new alert temperature threshold as a float. */ void setAlertTemp(float temp); /** Get the current alert temperature hysteresis threshold of the LM75B * * @returns The current alert temperature hysteresis threshold as a float. */ float getAlertHyst(void); /** Set the alert temperature hysteresis threshold of the LM75B * * @param temp The new alert temperature hysteresis threshold as a float. */ void setAlertHyst(float temp); /** Get the current temperature measurement of the LM75B * * @returns The current temperature measurement as a float. */ float getTemp(void); private: I2C _i2c; int _addr; char _read8(char reg); void _write8(char reg, char data); unsigned short _read16(char reg); void _write16(char reg, unsigned short data); float _readTempHelper(char reg); void _writeTempHelper(char reg, float temp); }; #endif