ADT7410 library

Dependents:   mbed_DEMO mbed_BLE

See https://developer.mbed.org/users/yasuyuki/notebook/ADT7410/

ADT7410.cpp

Committer:
yasuyuki
Date:
2015-06-03
Revision:
2:f01d96ee8fda
Parent:
1:b13511ed5965

File content as of revision 2:f01d96ee8fda:

//**********************
// ADT7410.cpp for mbed
//
// ADT7410 temperature(P0_5,P0_4);
// or
// I2C i2c(P0_5,P0_4);
// ADT7410 temperature(i2c);
//
// (C)Copyright 2014 All rights reserved by Y.Onodera
// http://einstlab.web.fc2.com
//**********************

#include "mbed.h"
#include "ADT7410.h"

//#define SPS
#define ONESHOT

ADT7410::ADT7410 (PinName sda, PinName scl) : _i2c(sda, scl) {
    init();
}
ADT7410::ADT7410 (I2C& p_i2c) : _i2c(p_i2c) {
    init();
}

void ADT7410::put(unsigned char a, unsigned char b)
{
    buf[0]=a;
    buf[1]=b;
    _i2c.write(ADT7410_ADDR, buf, 2);
}


void ADT7410::get(unsigned char a)
{
    buf[0] = a;
    _i2c.write(ADT7410_ADDR, buf, 1, false); // no stop, repeated
    _i2c.read( ADT7410_ADDR, buf, 2);

}

short ADT7410::value()
{

#ifdef ONESHOT
    // wakeup
    // set 16bit resolution with one shot mode
    put(ADT7410_CONFIG, 0xA0);
    wait_ms(240);
#endif

    // RDY?
//    do{
//        get(ADT7410_STATUS);
//    }while(buf[0] & 0x80);

    // get temp_high and low
    get(ADT7410_TEMP_H);
    temp.byte.HB=buf[0];
    temp.byte.LB=buf[1];
    return temp.S;
    
    // C = temp.S / 128
    
}

void ADT7410::init()
{
#ifdef SPS
    // set 16bit resolution with 1 sps mode
    put(ADT7410_CONFIG, 0xC0);
#endif
#ifdef ONSHOT
    // set 16bit resolution with one shot mode
    put(ADT7410_CONFIG, 0xA0);
#endif

}