void measure(struct bme280_t * sens) { s32 temp; bme280_read_uncomp_temperature(sens, &temp); s32 tempc = bme280_compensate_temperature_int32(sens, temp); transmit_decimal(tempc); bme280_read_uncomp_humidity(sens, &temp); tempc = bme280_compensate_humidity_int32(sens, temp); transmit_decimal(tempc>>10); }
OSStatus bme280_read_temperature(s32 *v_actual_temp_s32) { s32 com_rslt = BME280_ERROR; // result of communication results s32 v_data_uncomp_tem_s32 = BME280_INIT_VALUE; // uncompensated temperature //-------------------------- NOTE ---------------------------------- // this is to avoid i2c pin is re-init by other module because they use the same pin. MicoI2cInitialize(&user_i2c_device); //------------------------------------------------------------------ com_rslt = bme280_read_uncomp_temperature(&v_data_uncomp_tem_s32); if(0 != com_rslt){ return kReadErr; } *v_actual_temp_s32 = bme280_compensate_temperature_int32(v_data_uncomp_tem_s32); return kNoErr; }
/* This function is an example for reading sensor data * \param: None * \return: communication result */ s32 bme280_data_readout_template(void) { /* The variable used to assign the standby time*/ u8 v_stand_by_time_u8 = BME280_INIT_VALUE; /* The variable used to read uncompensated temperature*/ s32 v_data_uncomp_tem_s32 = BME280_INIT_VALUE; /* The variable used to read uncompensated pressure*/ s32 v_data_uncomp_pres_s32 = BME280_INIT_VALUE; /* The variable used to read uncompensated pressure*/ s32 v_data_uncomp_hum_s32 = BME280_INIT_VALUE; /* The variable used to read real temperature*/ s32 v_actual_temp_s32 = BME280_INIT_VALUE; /* The variable used to read real pressure*/ u32 v_actual_press_u32 = BME280_INIT_VALUE; /* The variable used to read real humidity*/ u32 v_actual_humity_u32 = BME280_INIT_VALUE; /* result of communication results*/ s32 com_rslt = BME280_ERROR; /*********************** START INITIALIZATION ************************/ /* Based on the user need configure I2C or SPI interface. * It is example code to explain how to use the bme280 API*/ #ifdef BME280_API I2C_routine(); /*SPI_routine(); */ #endif /*--------------------------------------------------------------------------* * This function used to assign the value/reference of * the following parameters * I2C address * Bus Write * Bus read * Chip id *-------------------------------------------------------------------------*/ com_rslt = bme280_init(&bme280); /* For initialization it is required to set the mode of * the sensor as "NORMAL" * data acquisition/read/write is possible in this mode * by using the below API able to set the power mode as NORMAL*/ /* Set the power mode as NORMAL*/ com_rslt += bme280_set_power_mode(BME280_NORMAL_MODE); /* For reading the pressure, humidity and temperature data it is required to * set the OSS setting of humidity, pressure and temperature * The "BME280_CTRLHUM_REG_OSRSH" register sets the humidity * data acquisition options of the device. * changes to this registers only become effective after a write operation to * "BME280_CTRLMEAS_REG" register. * In the code automated reading and writing of "BME280_CTRLHUM_REG_OSRSH" * register first set the "BME280_CTRLHUM_REG_OSRSH" and then read and write * the "BME280_CTRLMEAS_REG" register in the function*/ com_rslt += bme280_set_oversamp_humidity(BME280_OVERSAMP_1X); /* set the pressure oversampling*/ com_rslt += bme280_set_oversamp_pressure(BME280_OVERSAMP_2X); /* set the temperature oversampling*/ com_rslt += bme280_set_oversamp_temperature(BME280_OVERSAMP_4X); /*--------------------------------------------------------------------------*/ /*------------------------------------------------------------------------* ************************* START GET and SET FUNCTIONS DATA **************** *---------------------------------------------------------------------------*/ /* This API used to Write the standby time of the sensor input * value have to be given * Normal mode comprises an automated perpetual cycling between an (active) * Measurement period and an (inactive) standby period. * The standby time is determined by the contents of the register t_sb. * Standby time can be set using BME280_STANDBYTIME_125_MS. * Usage Hint : bme280_set_standbydur(BME280_STANDBYTIME_125_MS)*/ com_rslt += bme280_set_standby_durn(BME280_STANDBY_TIME_1_MS); /* This API used to read back the written value of standby time*/ com_rslt += bme280_get_standby_durn(&v_stand_by_time_u8); /*-----------------------------------------------------------------* ************************* END GET and SET FUNCTIONS **************** *------------------------------------------------------------------*/ /************************* END INITIALIZATION *************************/ /*------------------------------------------------------------------* ************ START READ UNCOMPENSATED PRESSURE, TEMPERATURE AND HUMIDITY DATA ******** *---------------------------------------------------------------------*/ /* API is used to read the uncompensated temperature*/ com_rslt += bme280_read_uncomp_temperature(&v_data_uncomp_tem_s32); /* API is used to read the uncompensated pressure*/ com_rslt += bme280_read_uncomp_pressure(&v_data_uncomp_pres_s32); /* API is used to read the uncompensated humidity*/ com_rslt += bme280_read_uncomp_humidity(&v_data_uncomp_hum_s32); /* API is used to read the uncompensated temperature,pressure and humidity data */ com_rslt += bme280_read_uncomp_pressure_temperature_humidity( &v_data_uncomp_tem_s32, &v_data_uncomp_pres_s32, &v_data_uncomp_hum_s32); /*--------------------------------------------------------------------* ************ END READ UNCOMPENSATED PRESSURE AND TEMPERATURE******** *-------------------------------------------------------------------------*/ /*------------------------------------------------------------------* ************ START READ TRUE PRESSURE, TEMPERATURE AND HUMIDITY DATA ******** *---------------------------------------------------------------------*/ /* API is used to read the true temperature*/ /* Input value as uncompensated temperature and output format*/ com_rslt += bme280_compensate_temperature_int32(v_data_uncomp_tem_s32); /* API is used to read the true pressure*/ /* Input value as uncompensated pressure */ com_rslt += bme280_compensate_pressure_int32(v_data_uncomp_pres_s32); /* API is used to read the true humidity*/ /* Input value as uncompensated humidity and output format*/ com_rslt += bme280_compensate_humidity_int32(v_data_uncomp_hum_s32); /* API is used to read the true temperature, humidity and pressure*/ com_rslt += bme280_read_pressure_temperature_humidity( &v_actual_press_u32, &v_actual_temp_s32, &v_actual_humity_u32); /*--------------------------------------------------------------------* ************ END READ TRUE PRESSURE, TEMPERATURE AND HUMIDITY ******** *-------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------* ************************* START DE-INITIALIZATION *********************** *-------------------------------------------------------------------------*/ /* For de-initialization it is required to set the mode of * the sensor as "SLEEP" * the device reaches the lowest power consumption only * In SLEEP mode no measurements are performed * All registers are accessible * by using the below API able to set the power mode as SLEEP*/ /* Set the power mode as SLEEP*/ com_rslt += bme280_set_power_mode(BME280_SLEEP_MODE); /*---------------------------------------------------------------------* ************************* END DE-INITIALIZATION ********************** *---------------------------------------------------------------------*/ return com_rslt; }