Javascript wrappers for HTS221 Sensor library

Dependencies:   HTS221

Dependents:   ST_SENSOR_JS

Committer:
akhtar.syedzeeshan@gmail.com
Date:
Tue Oct 10 11:51:26 2017 +0200
Revision:
0:89911ffe212d
Child:
1:924fb53eb7f8
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 1 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 2 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 3 * @file HTS221_JS.cpp
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 4 * @author ST
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 5 * @version V1.0.0
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 6 * @date 9 October 2017
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 7 * @brief Implementation of an HTS221 Humidity and Temperature sensor for use
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 8 * with Javascript.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 9 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 10 * @attention
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 11 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 13 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 14 * Redistribution and use in source and binary forms, with or without modification,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 15 * are permitted provided that the following conditions are met:
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 16 * 1. Redistributions of source code must retain the above copyright notice,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 17 * this list of conditions and the following disclaimer.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 19 * this list of conditions and the following disclaimer in the documentation
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 20 * and/or other materials provided with the distribution.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 22 * may be used to endorse or promote products derived from this software
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 23 * without specific prior written permission.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 24 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 35 *
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 36 ******************************************************************************
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 37 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 38
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 39
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 40 /* Includes ------------------------------------------------------------------*/
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 41
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 42 #include "HTS221_JS.h"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 43
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 44 #include <stdlib.h> /* atoi */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 45 #include "mbed.h"
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 46
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 47 /* Helper function for printing floats & doubles */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 48 static char *print_double(char* str, double v, int decimalDigits=2)
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 49 {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 50 int i = 1;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 51 int intPart, fractPart;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 52 int len;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 53 char *ptr;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 54
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 55 /* prepare decimal digits multiplicator */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 56 for (;decimalDigits!=0; i*=10, decimalDigits--);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 57
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 58 /* calculate integer & fractinal parts */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 59 intPart = (int)v;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 60 fractPart = (int)((v-(double)(int)v)*i);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 61
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 62 /* fill in integer part */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 63 sprintf(str, "%i.", intPart);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 64
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 65 /* prepare fill in of fractional part */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 66 len = strlen(str);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 67 ptr = &str[len];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 68
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 69 /* fill in leading fractional zeros */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 70 for (i/=10;i>1; i/=10, ptr++) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 71 if (fractPart >= i) {
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 72 break;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 73 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 74 *ptr = '0';
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 75 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 76
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 77 /* fill in (rest of) fractional part */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 78 sprintf(ptr, "%i", fractPart);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 79
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 80 return str;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 81 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 82
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 83 /* Class Implementation ------------------------------------------------------*/
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 84
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 85 /** Constructor
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 86 * @brief Initializing the component.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 87 * @param i2c object of an helper class which handles the I2C peripheral
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 88 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 89 HTS221_JS::HTS221_JS(DevI2C &i2c){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 90 hum_temp = new HTS221Sensor(&i2c);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 91 hum_temp->init(NULL);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 92 hum_temp->enable();
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 93 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 94
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 95 /** Destructor
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 96 * @brief Recycling the component.
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 97 * Deletes the Sensor Object
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 98 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 99 HTS221_JS::~HTS221_JS(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 100 if(hum_temp != NULL){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 101 delete hum_temp;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 102 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 103 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 104
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 105 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 106 * @brief Read ID address of HTS221
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 107 * @retval The ID of the Sensor
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 108 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 109 uint8_t HTS221_JS::readID(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 110 uint8_t result;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 111 hum_temp->read_id(&result);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 112 return result;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 113 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 114
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 115 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 116 * @brief Get the temperature reading from HTS221
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 117 * @retval Temperature value
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 118 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 119 float HTS221_JS::get_temperature(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 120 float value;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 121 hum_temp->get_temperature(&value);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 122 return value;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 123 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 124
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 125 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 126 * @brief Get the temperature reading from HTS221
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 127 * @retval Temperature value in string
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 128 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 129 unsigned char *HTS221_JS::get_temperature_string(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 130 float value;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 131 char buffer[32];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 132
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 133 hum_temp->get_temperature(&value);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 134 print_double(buffer, value);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 135 unsigned char *r = new unsigned char[6];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 136 for(int i = 0; i < 6; i++){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 137 r[i] = buffer[i];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 138 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 139 r[5] = '\0';
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 140 return r;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 141 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 142
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 143 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 144 * @brief Get the humidity reading from HTS221
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 145 * @retval Humidity value
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 146 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 147 float HTS221_JS::get_humidity(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 148 float value;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 149 hum_temp->get_humidity(&value);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 150 return value;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 151 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 152
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 153 /**
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 154 * @brief Get the humidity reading from HTS221
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 155 * @retval Humidity value in string
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 156 */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 157 unsigned char *HTS221_JS::get_humidity_string(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 158 float value;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 159 char buffer[32];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 160 hum_temp->get_humidity(&value);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 161 print_double(buffer, value);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 162 unsigned char *r = new unsigned char[6];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 163 for(int i = 0; i < 6; i++){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 164 r[i] = buffer[i];
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 165 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 166 r[5] = '\0';
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 167 return r;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 168 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 169 uint8_t HTS221_JS::give(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 170 return 43;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 171 }
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 172
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 173 /* Simple main function */
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 174 void HTS221_JS::print_sensor_info(){
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 175 uint8_t id;
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 176 hum_temp->read_id(&id);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 177 printf("HTS221 humidity & temperature = 0x%X\r\n", id);
akhtar.syedzeeshan@gmail.com 0:89911ffe212d 178 }