Grove Temp + Humidity sensor

Fork of driver_mbed_TH02 by Taylor Gy

driver_mbed_TH02.cpp

Committer:
ubhat
Date:
2017-11-04
Revision:
1:acf474af97a7
Parent:
0:89151affda00

File content as of revision 1:acf474af97a7:

/*
 * TH02_dev.cpp
 * Driver for DIGITAL I2C HUMIDITY AND TEMPERATURE SENSOR
 *  
 * Copyright (c) 2014 seeed technology inc.
 * Website    : www.seeed.cc
 * Author     : Oliver Wang
 * Create Time: April 2014
 * Change Log :
 *
 * The MIT License (MIT)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

/****************************************************************************/
/***        Include files                                                 ***/
/****************************************************************************/
#include "driver_mbed_TH02.h"
// #include <Wire.h>
// #include <Arduino.h>

/* Use Serial IIC */
#ifdef SERIAL_IIC
#endif

TH02_dev myTH02;
I2C i2cth02(D14, D15);
/****************************************************************************/
/***       Local Variable                                                 ***/
/****************************************************************************/


/****************************************************************************/
/***       Class member Functions                                         ***/
/****************************************************************************/

void TH02_dev::begin(void)
{
    /* Start IIC */
    // Wire.begin();
	/* TH02 don't need to software reset */
	printf("System Start !\r\n\r\n");
}

float TH02_dev::ReadTemperature(void)
{    
    /* Start a new temperature conversion */
	TH02_IIC_WriteReg(REG_CONFIG, CMD_MEASURE_TEMP);	 	 
    //delay(100);
	/* Wait until conversion is done */
	while(!isAvailable());
	uint16_t value = TH02_IIC_ReadData();
	
	value = value >> 2;
	/* 
	  Formula:
      Temperature(C) = (Value/32) - 50	  
	*/	
	float temper = (value/32.0)-50.0;
	
	return temper;
}
 
float TH02_dev::ReadHumidity(void)
{
 /* Start a new humility conversion */
	TH02_IIC_WriteReg(REG_CONFIG, CMD_MEASURE_HUMI);
	
	/* Wait until conversion is done */
	//delay(100);
	while(!isAvailable());
	uint16_t value = TH02_IIC_ReadData();
	
	value = value >> 4;
 
	/* 
	  Formula:
      Humidity(%) = (Value/16) - 24	  
	*/	

	float humility = (value/16.0)-24.0;
	
	return humility;
}

/****************************************************************************/
/***       Local Functions                                                ***/
/****************************************************************************/
uint8_t TH02_dev::isAvailable()
{
    uint8_t status =  TH02_IIC_ReadReg(REG_STATUS);
	if(status & STATUS_RDY_MASK)
	{
	    return 0;    //ready
	}
	else
	{
	    return 1;    //not ready yet
	}
}

void TH02_dev::TH02_IIC_WriteCmd(uint8_t u8Cmd)
{		
	char cmd = u8Cmd;
	/* Port to arduino */
	// Wire.beginTransmission(TH02_I2C_DEV_ID);
	// Wire.write(u8Cmd);
	// Wire.endTransmission();
	i2cth02.write(TH02_I2C_DEV_ID, &cmd, 1);

}

uint8_t TH02_dev::TH02_IIC_ReadReg(uint8_t u8Reg)
{
    /* Port to arduino */
    char Temp = 0;
	
	/* Send a register reading command */
    TH02_IIC_WriteCmd(u8Reg);	
		 
	// Wire.requestFrom(TH02_I2C_DEV_ID, 1);	 
	// while(Wire.available())
	// {
	//     Temp = Wire.read();	 
	// }

	i2cth02.read(TH02_I2C_DEV_ID, &Temp, 1);
		
	return Temp;
} 

void TH02_dev::TH02_IIC_WriteReg(uint8_t u8Reg,uint8_t u8Data)
{           
	// Wire.beginTransmission(TH02_I2C_DEV_ID);	 
	// Wire.write(u8Reg);	 
	// Wire.write(u8Data);	 
	// Wire.endTransmission();	 
	char cmd[2];
	cmd[0] = u8Reg;
	cmd[1] = u8Data;
	i2cth02.write(TH02_I2C_DEV_ID, cmd, 2);
}

uint16_t TH02_dev::TH02_IIC_ReadData(void)
{                        
	/* Port to arduino */	 
	uint16_t Temp = TH02_IIC_ReadData2byte(); 
	return Temp;
}

uint16_t TH02_dev::TH02_IIC_ReadData2byte()
{
    uint16_t TempData = 0;
	// uint16_t tmpArray[3]={0};
	char tmpArray[3];

	TH02_IIC_WriteCmd(REG_DATA_H);	
	
	// Wire.requestFrom(TH02_I2C_DEV_ID, 3);	 
	// while(Wire.available())
	// {
	//     tmpArray[cnt] = (uint16_t)Wire.read();        	        	
	// 	cnt++;
	// }
	i2cth02.read(TH02_I2C_DEV_ID, tmpArray, 3);

	/* MSB */
	TempData = (tmpArray[1]<<8)|(tmpArray[2]); 
	return TempData;
}