MAX30205 Human Body Temperature Sensor

Dependents:   test_MAX30205

MAX30205.cpp

Committer:
Rhyme
Date:
2017-04-25
Revision:
1:eed7f4c33402
Parent:
0:6cf99fa71e1b

File content as of revision 1:eed7f4c33402:

#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);
}