MAX30205 Human Body Temperature Sensor
Revision 0:6cf99fa71e1b, committed 2017-04-25
- Comitter:
- Rhyme
- Date:
- Tue Apr 25 05:04:06 2017 +0000
- Child:
- 1:eed7f4c33402
- Commit message:
- First working version, minimum test is done, as usual
Changed in this revision
MAX30205.cpp | Show annotated file Show diff for this revision Revisions of this file |
MAX30205.h | Show annotated file Show diff for this revision Revisions of this file |
--- /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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX30205.h Tue Apr 25 05:04:06 2017 +0000 @@ -0,0 +1,107 @@ +#ifndef _MAX30205_H_ +#define _MAX30205_H_ +/** + * MAX30205 Human Body Temperature Sensor + */ +#include "mbed.h" + +class MAX30205 +{ +public: + /** + * MAX30205 constructor + * + * @param sda SDA pin + * @param sdl SCL pin + * @param addr addr of the I2C peripheral + */ + MAX30205(PinName sda, PinName scl, int addr); + + /** + * MAX30205 destructor + */ + ~MAX30205(); + +/** + * Get temperature + * @param (none) + * @returns uint16_t temperature value + * @note bit[15] Sign + * @note bit[14] 64 C + * @note bit[13] 32 C + * @note bit[12] 16 C + * @note bit[11] 8 C + * @note bit[10] 4 C + * @note bit[ 9] 2 C + * @note bit[ 8] 1 C + * @note bit[ 7] 0.5 C + * @note bit[ 6] 0.25 C + * @note bit[ 5] 0.125 C + * @note bit[ 4] 0.0625 C + * @note bit[ 3] 0.03125 C + * @note bit[ 2] 0.015625 C + * @note bit[ 1] 0.0078125 C + * @note bit[ 0] 0.00390625 C + */ +uint16_t getTemp(void) ; + +/** + * Get configuration register + * @param (none) + * @returns uint8_t configuration register value + * @note bit[7] ONE-SHOT + * @note bit[6] /TIMEOUT I2C but timeout 0: enable 1: disable + * @note bit[5] DATAFORMAT 0: normal (0 - +50) 1: extended (64c + 2's comp) + * @note bit[4] FAULT_QUEUE[1] determine the number of faults necessary to + * @note bit[3] FAULT_QUEUE[0] trigger an OS condition. + * @note bit[2] OS_POLARITY 0: OS output polarity active low 1: active high + * @note bit[1] /COMPARATOR/INTERRUPT 0: comparator ode 1: interrupt mode + * @note bit[0] SHUTDOWN 0: exit from shutdown 1: enter shutdown mode + */ + +uint8_t getConf(void) ; + +/** + * Set configuration register + * @param uint8_t register value + * @returns (none) + */ +void setConf(uint8_t conf) ; + +/** + * Get Thyst (lower limit threshold) + * @param (none) + * @returns uint16_t Thyst value + */ +uint16_t getThyst(void) ; + +/** + * Set Thyst + * @param uint16_t thyst + * @returns (none) + */ +void setThyst(uint16_t thyst) ; + +/** + * Get Tos (upper limit threshold) + * @param (none) + * @returns uint16_t Tos + */ +uint16_t getTos(void) ; + +/** + * Set Tos + * @param uint16_t Tos + * @returns (none) + */ +void setTos(uint16_t tos) ; + +private: + I2C m_i2c; + int m_addr; + void readRegs(int addr, uint8_t * data, int len); + void writeRegs(uint8_t * data, int len); + +}; + +#endif /* _MAX30205_H_ */ \ No newline at end of file