Updated version for LoraWan GEII IUT

Dependencies:   Servo Cayenne-LPP

Committer:
alainpegatoquet
Date:
Fri Mar 04 09:50:35 2022 +0000
Revision:
64:1e20d66960c3
Maj des drivers mbed-os et mbed-lora-radio-drv

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alainpegatoquet 64:1e20d66960c3 1 /*
alainpegatoquet 64:1e20d66960c3 2 * TH02_dev.cpp
alainpegatoquet 64:1e20d66960c3 3 * Driver for DIGITAL I2C HUMIDITY AND TEMPERATURE SENSOR
alainpegatoquet 64:1e20d66960c3 4 *
alainpegatoquet 64:1e20d66960c3 5 * Copyright (c) 2014 seeed technology inc.
alainpegatoquet 64:1e20d66960c3 6 * Website : www.seeed.cc
alainpegatoquet 64:1e20d66960c3 7 * Author : Oliver Wang
alainpegatoquet 64:1e20d66960c3 8 * Create Time: April 2014
alainpegatoquet 64:1e20d66960c3 9 * Change Log :
alainpegatoquet 64:1e20d66960c3 10 *
alainpegatoquet 64:1e20d66960c3 11 * The MIT License (MIT)
alainpegatoquet 64:1e20d66960c3 12 *
alainpegatoquet 64:1e20d66960c3 13 * Permission is hereby granted, free of charge, to any person obtaining a copy
alainpegatoquet 64:1e20d66960c3 14 * of this software and associated documentation files (the "Software"), to deal
alainpegatoquet 64:1e20d66960c3 15 * in the Software without restriction, including without limitation the rights
alainpegatoquet 64:1e20d66960c3 16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
alainpegatoquet 64:1e20d66960c3 17 * copies of the Software, and to permit persons to whom the Software is
alainpegatoquet 64:1e20d66960c3 18 * furnished to do so, subject to the following conditions:
alainpegatoquet 64:1e20d66960c3 19 *
alainpegatoquet 64:1e20d66960c3 20 * The above copyright notice and this permission notice shall be included in
alainpegatoquet 64:1e20d66960c3 21 * all copies or substantial portions of the Software.
alainpegatoquet 64:1e20d66960c3 22 *
alainpegatoquet 64:1e20d66960c3 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
alainpegatoquet 64:1e20d66960c3 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
alainpegatoquet 64:1e20d66960c3 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
alainpegatoquet 64:1e20d66960c3 26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
alainpegatoquet 64:1e20d66960c3 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
alainpegatoquet 64:1e20d66960c3 28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
alainpegatoquet 64:1e20d66960c3 29 * THE SOFTWARE.
alainpegatoquet 64:1e20d66960c3 30 */
alainpegatoquet 64:1e20d66960c3 31
alainpegatoquet 64:1e20d66960c3 32 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 33 /*** Include files ***/
alainpegatoquet 64:1e20d66960c3 34 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 35 #include "driver_mbed_TH02.h"
alainpegatoquet 64:1e20d66960c3 36 // #include <Wire.h>
alainpegatoquet 64:1e20d66960c3 37 // #include <Arduino.h>
alainpegatoquet 64:1e20d66960c3 38
alainpegatoquet 64:1e20d66960c3 39 /* Use Serial IIC */
alainpegatoquet 64:1e20d66960c3 40 #ifdef SERIAL_IIC
alainpegatoquet 64:1e20d66960c3 41 #endif
alainpegatoquet 64:1e20d66960c3 42
alainpegatoquet 64:1e20d66960c3 43 TH02_dev myTH02;
alainpegatoquet 64:1e20d66960c3 44 I2C i2cth02(PB_9, PB_8);
alainpegatoquet 64:1e20d66960c3 45 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 46 /*** Local Variable ***/
alainpegatoquet 64:1e20d66960c3 47 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 48
alainpegatoquet 64:1e20d66960c3 49
alainpegatoquet 64:1e20d66960c3 50 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 51 /*** Class member Functions ***/
alainpegatoquet 64:1e20d66960c3 52 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 53
alainpegatoquet 64:1e20d66960c3 54 void TH02_dev::begin(void)
alainpegatoquet 64:1e20d66960c3 55 {
alainpegatoquet 64:1e20d66960c3 56 /* Start IIC */
alainpegatoquet 64:1e20d66960c3 57 // Wire.begin();
alainpegatoquet 64:1e20d66960c3 58 /* TH02 don't need to software reset */
alainpegatoquet 64:1e20d66960c3 59 printf("System Start !\r\n\r\n");
alainpegatoquet 64:1e20d66960c3 60 }
alainpegatoquet 64:1e20d66960c3 61
alainpegatoquet 64:1e20d66960c3 62 float TH02_dev::ReadTemperature(void)
alainpegatoquet 64:1e20d66960c3 63 {
alainpegatoquet 64:1e20d66960c3 64 /* Start a new temperature conversion */
alainpegatoquet 64:1e20d66960c3 65 TH02_IIC_WriteReg(REG_CONFIG, CMD_MEASURE_TEMP);
alainpegatoquet 64:1e20d66960c3 66 //delay(100);
alainpegatoquet 64:1e20d66960c3 67 /* Wait until conversion is done */
alainpegatoquet 64:1e20d66960c3 68 while(!isAvailable());
alainpegatoquet 64:1e20d66960c3 69 uint16_t value = TH02_IIC_ReadData();
alainpegatoquet 64:1e20d66960c3 70
alainpegatoquet 64:1e20d66960c3 71 value = value >> 2;
alainpegatoquet 64:1e20d66960c3 72 /*
alainpegatoquet 64:1e20d66960c3 73 Formula:
alainpegatoquet 64:1e20d66960c3 74 Temperature(C) = (Value/32) - 50
alainpegatoquet 64:1e20d66960c3 75 */
alainpegatoquet 64:1e20d66960c3 76 float temper = (value/32.0)-50.0;
alainpegatoquet 64:1e20d66960c3 77
alainpegatoquet 64:1e20d66960c3 78 return temper;
alainpegatoquet 64:1e20d66960c3 79 }
alainpegatoquet 64:1e20d66960c3 80
alainpegatoquet 64:1e20d66960c3 81 float TH02_dev::ReadHumidity(void)
alainpegatoquet 64:1e20d66960c3 82 {
alainpegatoquet 64:1e20d66960c3 83 /* Start a new humility conversion */
alainpegatoquet 64:1e20d66960c3 84 TH02_IIC_WriteReg(REG_CONFIG, CMD_MEASURE_HUMI);
alainpegatoquet 64:1e20d66960c3 85
alainpegatoquet 64:1e20d66960c3 86 /* Wait until conversion is done */
alainpegatoquet 64:1e20d66960c3 87 //delay(100);
alainpegatoquet 64:1e20d66960c3 88 while(!isAvailable());
alainpegatoquet 64:1e20d66960c3 89 uint16_t value = TH02_IIC_ReadData();
alainpegatoquet 64:1e20d66960c3 90
alainpegatoquet 64:1e20d66960c3 91 value = value >> 4;
alainpegatoquet 64:1e20d66960c3 92
alainpegatoquet 64:1e20d66960c3 93 /*
alainpegatoquet 64:1e20d66960c3 94 Formula:
alainpegatoquet 64:1e20d66960c3 95 Humidity(%) = (Value/16) - 24
alainpegatoquet 64:1e20d66960c3 96 */
alainpegatoquet 64:1e20d66960c3 97
alainpegatoquet 64:1e20d66960c3 98 float humility = (value/16.0)-24.0;
alainpegatoquet 64:1e20d66960c3 99
alainpegatoquet 64:1e20d66960c3 100 return humility;
alainpegatoquet 64:1e20d66960c3 101 }
alainpegatoquet 64:1e20d66960c3 102
alainpegatoquet 64:1e20d66960c3 103 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 104 /*** Local Functions ***/
alainpegatoquet 64:1e20d66960c3 105 /****************************************************************************/
alainpegatoquet 64:1e20d66960c3 106 uint8_t TH02_dev::isAvailable()
alainpegatoquet 64:1e20d66960c3 107 {
alainpegatoquet 64:1e20d66960c3 108 uint8_t status = TH02_IIC_ReadReg(REG_STATUS);
alainpegatoquet 64:1e20d66960c3 109 if(status & STATUS_RDY_MASK)
alainpegatoquet 64:1e20d66960c3 110 {
alainpegatoquet 64:1e20d66960c3 111 return 0; //ready
alainpegatoquet 64:1e20d66960c3 112 }
alainpegatoquet 64:1e20d66960c3 113 else
alainpegatoquet 64:1e20d66960c3 114 {
alainpegatoquet 64:1e20d66960c3 115 return 1; //not ready yet
alainpegatoquet 64:1e20d66960c3 116 }
alainpegatoquet 64:1e20d66960c3 117 }
alainpegatoquet 64:1e20d66960c3 118
alainpegatoquet 64:1e20d66960c3 119 void TH02_dev::TH02_IIC_WriteCmd(uint8_t u8Cmd)
alainpegatoquet 64:1e20d66960c3 120 {
alainpegatoquet 64:1e20d66960c3 121 char cmd = u8Cmd;
alainpegatoquet 64:1e20d66960c3 122 /* Port to arduino */
alainpegatoquet 64:1e20d66960c3 123 // Wire.beginTransmission(TH02_I2C_DEV_ID);
alainpegatoquet 64:1e20d66960c3 124 // Wire.write(u8Cmd);
alainpegatoquet 64:1e20d66960c3 125 // Wire.endTransmission();
alainpegatoquet 64:1e20d66960c3 126 i2cth02.write(TH02_I2C_DEV_ID, &cmd, 1);
alainpegatoquet 64:1e20d66960c3 127
alainpegatoquet 64:1e20d66960c3 128 }
alainpegatoquet 64:1e20d66960c3 129
alainpegatoquet 64:1e20d66960c3 130 uint8_t TH02_dev::TH02_IIC_ReadReg(uint8_t u8Reg)
alainpegatoquet 64:1e20d66960c3 131 {
alainpegatoquet 64:1e20d66960c3 132 /* Port to arduino */
alainpegatoquet 64:1e20d66960c3 133 char Temp = 0;
alainpegatoquet 64:1e20d66960c3 134
alainpegatoquet 64:1e20d66960c3 135 /* Send a register reading command */
alainpegatoquet 64:1e20d66960c3 136 TH02_IIC_WriteCmd(u8Reg);
alainpegatoquet 64:1e20d66960c3 137
alainpegatoquet 64:1e20d66960c3 138 // Wire.requestFrom(TH02_I2C_DEV_ID, 1);
alainpegatoquet 64:1e20d66960c3 139 // while(Wire.available())
alainpegatoquet 64:1e20d66960c3 140 // {
alainpegatoquet 64:1e20d66960c3 141 // Temp = Wire.read();
alainpegatoquet 64:1e20d66960c3 142 // }
alainpegatoquet 64:1e20d66960c3 143
alainpegatoquet 64:1e20d66960c3 144 i2cth02.read(TH02_I2C_DEV_ID, &Temp, 1);
alainpegatoquet 64:1e20d66960c3 145
alainpegatoquet 64:1e20d66960c3 146 return Temp;
alainpegatoquet 64:1e20d66960c3 147 }
alainpegatoquet 64:1e20d66960c3 148
alainpegatoquet 64:1e20d66960c3 149 void TH02_dev::TH02_IIC_WriteReg(uint8_t u8Reg,uint8_t u8Data)
alainpegatoquet 64:1e20d66960c3 150 {
alainpegatoquet 64:1e20d66960c3 151 // Wire.beginTransmission(TH02_I2C_DEV_ID);
alainpegatoquet 64:1e20d66960c3 152 // Wire.write(u8Reg);
alainpegatoquet 64:1e20d66960c3 153 // Wire.write(u8Data);
alainpegatoquet 64:1e20d66960c3 154 // Wire.endTransmission();
alainpegatoquet 64:1e20d66960c3 155 char cmd[2];
alainpegatoquet 64:1e20d66960c3 156 cmd[0] = u8Reg;
alainpegatoquet 64:1e20d66960c3 157 cmd[1] = u8Data;
alainpegatoquet 64:1e20d66960c3 158 i2cth02.write(TH02_I2C_DEV_ID, cmd, 2);
alainpegatoquet 64:1e20d66960c3 159 }
alainpegatoquet 64:1e20d66960c3 160
alainpegatoquet 64:1e20d66960c3 161 uint16_t TH02_dev::TH02_IIC_ReadData(void)
alainpegatoquet 64:1e20d66960c3 162 {
alainpegatoquet 64:1e20d66960c3 163 /* Port to arduino */
alainpegatoquet 64:1e20d66960c3 164 uint16_t Temp = TH02_IIC_ReadData2byte();
alainpegatoquet 64:1e20d66960c3 165 return Temp;
alainpegatoquet 64:1e20d66960c3 166 }
alainpegatoquet 64:1e20d66960c3 167
alainpegatoquet 64:1e20d66960c3 168 uint16_t TH02_dev::TH02_IIC_ReadData2byte()
alainpegatoquet 64:1e20d66960c3 169 {
alainpegatoquet 64:1e20d66960c3 170 uint16_t TempData = 0;
alainpegatoquet 64:1e20d66960c3 171 // uint16_t tmpArray[3]={0};
alainpegatoquet 64:1e20d66960c3 172 char tmpArray[3];
alainpegatoquet 64:1e20d66960c3 173
alainpegatoquet 64:1e20d66960c3 174 TH02_IIC_WriteCmd(REG_DATA_H);
alainpegatoquet 64:1e20d66960c3 175
alainpegatoquet 64:1e20d66960c3 176 // Wire.requestFrom(TH02_I2C_DEV_ID, 3);
alainpegatoquet 64:1e20d66960c3 177 // while(Wire.available())
alainpegatoquet 64:1e20d66960c3 178 // {
alainpegatoquet 64:1e20d66960c3 179 // tmpArray[cnt] = (uint16_t)Wire.read();
alainpegatoquet 64:1e20d66960c3 180 // cnt++;
alainpegatoquet 64:1e20d66960c3 181 // }
alainpegatoquet 64:1e20d66960c3 182 i2cth02.read(TH02_I2C_DEV_ID, tmpArray, 3);
alainpegatoquet 64:1e20d66960c3 183
alainpegatoquet 64:1e20d66960c3 184 /* MSB */
alainpegatoquet 64:1e20d66960c3 185 TempData = (tmpArray[1]<<8)|(tmpArray[2]);
alainpegatoquet 64:1e20d66960c3 186 return TempData;
alainpegatoquet 64:1e20d66960c3 187 }