MAX30205 Human Body Temperature Sensor
Diff: MAX30205.cpp
- Revision:
- 0:6cf99fa71e1b
diff -r 000000000000 -r 6cf99fa71e1b MAX30205.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX30205.cpp Tue Apr 25 05:04:06 2017 +0000 @@ -0,0 +1,96 @@ +#include "mbed.h" +#include "MAX30205.h" + +/** + * Internal Registers + * The device contains four registers, + * each of which consists of 2bytes. + * The configuration register contains only 1 byte of + * actual data and, when read as a 2-byte register, + * repeats the same data for the second byte. + */ + +#define REG_TEMP 0x00 +#define REG_CONF 0x01 +#define REG_THYST 0x02 +#define REG_TOS 0x03 + +MAX30205::MAX30205(PinName sda, PinName scl, int addr): m_i2c(sda, scl), m_addr(addr<<1) +{ + // activate the peripheral +} + +MAX30205::~MAX30205() +{ +} + +uint16_t MAX30205::getTemp(void) +{ + uint16_t temp ; + uint8_t data[2] ; + readRegs(REG_TEMP, data, 2) ; + temp = (data[0] << 8) | data[1] ; + return(temp) ; +} + +uint8_t MAX30205::getConf(void) +{ + uint8_t data[2] ; + readRegs(REG_CONF, data, 2) ; + return(data[0]) ; +} + +void MAX30205::setConf(uint8_t conf) +{ + uint8_t data[3] ; + data[0] = REG_CONF ; + data[1] = conf ; + data[2] = conf ; + writeRegs(data, 3) ; +} + +uint16_t MAX30205::getThyst(void) +{ + uint16_t thyst ; + uint8_t data[2] ; + readRegs(REG_THYST, data, 2) ; + thyst = (data[0] << 8) | data[1] ; + return(thyst) ; +} + +void MAX30205::setThyst(uint16_t thyst) +{ + uint8_t data[3] ; + data[0] = REG_THYST ; + data[1] = (thyst >> 8) & 0xFF ; + data[2] = thyst & 0xFF ; + writeRegs(data, 3) ; +} + +uint16_t MAX30205::getTos(void) +{ + uint16_t tos ; + uint8_t data[2] ; + readRegs(REG_TOS, data, 2) ; + tos = (data[0] << 8) | data[1] ; + return(tos) ; +} + +void MAX30205::setTos(uint16_t tos) +{ + uint8_t data[3] ; + data[0] = REG_TOS ; + data[1] = (tos >> 8) & 0xFF ; + data[2] = tos & 0xFF ; + writeRegs(data, 3) ; +} + +void MAX30205::readRegs(int addr, uint8_t * data, int len) { + char t[1] = {addr}; + m_i2c.write(m_addr, t, 1, true); + m_i2c.read(m_addr, (char *)data, len); +} + +void MAX30205::writeRegs(uint8_t * data, int len) { + m_i2c.write(m_addr, (char *)data, len); +} \ No newline at end of file