A feature complete driver for the LM75B temperature sensor from NXP.
Fork of LM75B by
Diff: LM75B.cpp
- Revision:
- 13:27c19044ace6
- Parent:
- 9:74b44a27fa40
- Child:
- 14:3a44310726fe
--- a/LM75B.cpp Mon Sep 16 21:32:18 2013 +0000 +++ b/LM75B.cpp Thu Nov 07 17:42:41 2013 +0000 @@ -16,16 +16,16 @@ #include "LM75B.h" -LM75B::LM75B(PinName sda, PinName scl, Address addr) : m_I2C(sda, scl) +LM75B::LM75B(PinName sda, PinName scl, Address addr) : m_I2C(sda, scl), m_ADDR((int)addr) { - //Set the internal device address - m_Addr = (int)addr; + //Set the I2C bus frequency to 400kHz + m_I2C.frequency(400000); } -bool LM75B::open(void) +bool LM75B::open() { //Probe for the LM75B using a Zero Length Transfer - if (!m_I2C.write(m_Addr, NULL, 0)) { + if (!m_I2C.write(m_ADDR, NULL, 0)) { //Reset the device to default configuration write8(REG_CONF, 0x00); write16(REG_THYST, 0x4B00); @@ -39,7 +39,7 @@ } } -LM75B::PowerMode LM75B::powerMode(void) +LM75B::PowerMode LM75B::powerMode() { //Read the 8-bit register value char value = read8(REG_CONF); @@ -66,7 +66,7 @@ write8(REG_CONF, value); } -LM75B::OSMode LM75B::osMode(void) +LM75B::OSMode LM75B::osMode() { //Read the 8-bit register value char value = read8(REG_CONF); @@ -93,7 +93,7 @@ write8(REG_CONF, value); } -LM75B::OSPolarity LM75B::osPolarity(void) +LM75B::OSPolarity LM75B::osPolarity() { //Read the 8-bit register value char value = read8(REG_CONF); @@ -120,7 +120,7 @@ write8(REG_CONF, value); } -LM75B::OSFaultQueue LM75B::osFaultQueue(void) +LM75B::OSFaultQueue LM75B::osFaultQueue() { //Read the 8-bit register value char value = read8(REG_CONF); @@ -156,7 +156,7 @@ write8(REG_CONF, value); } -float LM75B::alertTemp(void) +float LM75B::alertTemp() { //Use the 9-bit helper to read the TOS register return readAlertTempHelper(REG_TOS); @@ -168,7 +168,7 @@ return writeAlertTempHelper(REG_TOS, temp); } -float LM75B::alertHyst(void) +float LM75B::alertHyst() { //Use the 9-bit helper to read the THYST register return readAlertTempHelper(REG_THYST); @@ -180,7 +180,7 @@ return writeAlertTempHelper(REG_THYST, temp); } -float LM75B::temp(void) +float LM75B::temp() { //Signed return value short value; @@ -196,13 +196,19 @@ return value * 0.125; } +LM75B::operator float() +{ + //Return the current temperature reading + return temp(); +} + char LM75B::read8(char reg) { //Select the register - m_I2C.write(m_Addr, ®, 1); + m_I2C.write(m_ADDR, ®, 1, true); //Read the 8-bit register - m_I2C.read(m_Addr, ®, 1); + m_I2C.read(m_ADDR, ®, 1); //Return the byte return reg; @@ -218,7 +224,7 @@ buff[1] = data; //Write the data - m_I2C.write(m_Addr, buff, 2); + m_I2C.write(m_ADDR, buff, 2); } unsigned short LM75B::read16(char reg) @@ -227,10 +233,10 @@ char buff[2]; //Select the register - m_I2C.write(m_Addr, ®, 1); + m_I2C.write(m_ADDR, ®, 1, true); //Read the 16-bit register - m_I2C.read(m_Addr, buff, 2); + m_I2C.read(m_ADDR, buff, 2); //Return the combined 16-bit value return (buff[0] << 8) | buff[1]; @@ -247,7 +253,7 @@ buff[2] = data; //Write the data - m_I2C.write(m_Addr, buff, 3); + m_I2C.write(m_ADDR, buff, 3); } float LM75B::readAlertTempHelper(char reg)