123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /*
- * 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 "TH02_dev.h"
- #include <Wire.h>
- #include <Arduino.h>
- /* Use Serial IIC */
- #ifdef SERIAL_IIC
- #endif
- TH02_dev TH02;
- /****************************************************************************/
- /*** Local Variable ***/
- /****************************************************************************/
- /****************************************************************************/
- /*** Class member Functions ***/
- /****************************************************************************/
- void TH02_dev::begin(void)
- {
- /* Start IIC */
- Wire.begin();
- /* TH02 don't need to software reset */
- }
- 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)
- {
- /* Port to arduino */
- Wire.beginTransmission(TH02_I2C_DEV_ID);
- Wire.write(u8Cmd);
- Wire.endTransmission();
- }
- uint8_t TH02_dev::TH02_IIC_ReadReg(uint8_t u8Reg)
- {
- /* Port to arduino */
- uint8_t Temp = 0;
-
- /* Send a register reading command */
- TH02_IIC_WriteCmd(u8Reg);
-
- Wire.requestFrom(TH02_I2C_DEV_ID, 1);
- while(Wire.available())
- {
- Temp = Wire.read();
- }
-
- 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();
- }
- 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};
- int cnt = 0;
- TH02_IIC_WriteCmd(REG_DATA_H);
-
- Wire.requestFrom(TH02_I2C_DEV_ID, 3);
- while(Wire.available())
- {
- tmpArray[cnt] = (uint16_t)Wire.read();
- cnt++;
- }
- /* MSB */
- TempData = (tmpArray[1]<<8)|(tmpArray[2]);
- return TempData;
- }
|