LibDriver BME680
Loading...
Searching...
No Matches
driver_bme680_gas.c
Go to the documentation of this file.
1
36
37#include "driver_bme680_gas.h"
38
39static bme680_handle_t gs_handle;
40
51{
52 uint8_t res;
53
54 /* link interface function */
66
67 /* set interface */
68 res = bme680_set_interface(&gs_handle, interface);
69 if (res != 0)
70 {
71 bme680_interface_debug_print("bme680: set interface failed.\n");
72
73 return 1;
74 }
75
76 /* set addr pin */
77 res = bme680_set_addr_pin(&gs_handle, addr_pin);
78 if (res != 0)
79 {
80 bme680_interface_debug_print("bme680: set addr pin failed.\n");
81
82 return 1;
83 }
84
85 /* bme680 init */
86 res = bme680_init(&gs_handle);
87 if (res != 0)
88 {
89 bme680_interface_debug_print("bme680: init failed.\n");
90
91 return 1;
92 }
93
94 /* set default temperature oversampling */
96 if (res != 0)
97 {
98 bme680_interface_debug_print("bme680: set temperature oversampling failed.\n");
99 (void)bme680_deinit(&gs_handle);
100
101 return 1;
102 }
103
104 /* set default pressure oversampling */
106 if (res != 0)
107 {
108 bme680_interface_debug_print("bme680: set pressure oversampling failed.\n");
109 (void)bme680_deinit(&gs_handle);
110
111 return 1;
112 }
113
114 /* set default humidity oversampling */
116 if (res != 0)
117 {
118 bme680_interface_debug_print("bme680: set humidity oversampling failed.\n");
119 (void)bme680_deinit(&gs_handle);
120
121 return 1;
122 }
123
124 /* set default filter */
126 if (res != 0)
127 {
128 bme680_interface_debug_print("bme680: set filter failed.\n");
129 (void)bme680_deinit(&gs_handle);
130
131 return 1;
132 }
133
134 /* set default spi wire */
136 if (res != 0)
137 {
138 bme680_interface_debug_print("bme680: set spi wire failed.\n");
139 (void)bme680_deinit(&gs_handle);
140
141 return 1;
142 }
143
144 /* disable heat off */
145 res = bme680_set_heat_off(&gs_handle, BME680_BOOL_FALSE);
146 if (res != 0)
147 {
148 bme680_interface_debug_print("bme680: set heat off failed.\n");
149 (void)bme680_deinit(&gs_handle);
150
151 return 1;
152 }
153
154 /* enable run gas */
155 res = bme680_set_run_gas(&gs_handle, BME680_BOOL_TRUE);
156 if (res != 0)
157 {
158 bme680_interface_debug_print("bme680: set run gas failed.\n");
159 (void)bme680_deinit(&gs_handle);
160
161 return 1;
162 }
163
164 /* set sleep mode */
165 res = bme680_set_mode(&gs_handle, BME680_MODE_SLEEP);
166 if (res != 0)
167 {
168 bme680_interface_debug_print("bme680: set mode failed.\n");
169 (void)bme680_deinit(&gs_handle);
170
171 return 1;
172 }
173
174 return 0;
175}
176
192uint8_t bme680_gas_read(float idac_ma, float degree_celsius, uint16_t gas_wait_ms, uint8_t index,
193 float *temperature, float *pressure, float *humidity_percentage, float *ohms)
194{
195 uint8_t res;
196 uint8_t reg;
197 uint32_t temperature_yaw;
198 uint32_t pressure_yaw;
199 uint32_t humidity_raw;
200 uint16_t adc_raw;
201 uint8_t adc_range;
202 uint8_t index_check;
203
204 /* set idac ma */
205 res = bme680_idac_heat_convert_to_register(&gs_handle, idac_ma, &reg);
206 if (res != 0)
207 {
208 return 1;
209 }
210
211 /* set idac heat */
212 res = bme680_set_idac_heat(&gs_handle, index, reg);
213 if (res != 0)
214 {
215 return 1;
216 }
217
218 /* set degree celsius */
219 res = bme680_resistance_heat_convert_to_register(&gs_handle, degree_celsius, &reg);
220 if (res != 0)
221 {
222 return 1;
223 }
224
225 /* set resistance heat */
226 res = bme680_set_resistance_heat(&gs_handle, index, reg);
227 if (res != 0)
228 {
229 return 1;
230 }
231
232 /* set gas wait */
233 res = bme680_gas_wait_convert_to_register(&gs_handle, gas_wait_ms, &reg);
234 if (res != 0)
235 {
236 return 1;
237 }
238
239 /* set gas wait */
240 res = bme680_set_gas_wait(&gs_handle, index, reg);
241 if (res != 0)
242 {
243 return 1;
244 }
245
246 /* set convert index */
247 res = bme680_set_convert_index(&gs_handle, index);
248 if (res != 0)
249 {
250 return 1;
251 }
252
253 /* read */
254 if (bme680_read(&gs_handle, (uint32_t *)&temperature_yaw,
255 temperature, (uint32_t *)&pressure_yaw, pressure,
256 (uint32_t *)&humidity_raw, humidity_percentage,
257 &adc_raw, &adc_range, ohms, &index_check) != 0)
258 {
259 return 1;
260 }
261
262 /* check index */
263 if (index_check != index)
264 {
265 return 1;
266 }
267
268 return 0;
269}
270
278uint8_t bme680_gas_deinit(void)
279{
280 /* close bme680 */
281 if (bme680_deinit(&gs_handle) != 0)
282 {
283 return 1;
284 }
285
286 return 0;
287}
driver bme680 gas header file
uint8_t bme680_set_run_gas(bme680_handle_t *handle, bme680_bool_t enable)
enable or disable run gas
uint8_t bme680_gas_wait_convert_to_register(bme680_handle_t *handle, uint16_t ms, uint8_t *reg)
convert the gas wait to the register raw data
uint8_t bme680_set_filter(bme680_handle_t *handle, bme680_filter_t filter)
set filter
uint8_t bme680_read(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c, uint32_t *pressure_raw, float *pressure_pa, uint32_t *humidity_raw, float *humidity_percentage, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index)
read the temperature pressure humidity and gas resistance
uint8_t bme680_deinit(bme680_handle_t *handle)
close the chip
uint8_t bme680_set_temperature_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set temperature oversampling
uint8_t bme680_set_heat_off(bme680_handle_t *handle, bme680_bool_t enable)
enable or disable heat off
uint8_t bme680_set_interface(bme680_handle_t *handle, bme680_interface_t interface)
set the interface
uint8_t bme680_set_idac_heat(bme680_handle_t *handle, uint8_t index, uint8_t reg)
set idac heat
uint8_t bme680_set_convert_index(bme680_handle_t *handle, uint8_t index)
set convert index
bme680_interface_t
bme680 interface enumeration definition
uint8_t bme680_set_resistance_heat(bme680_handle_t *handle, uint8_t index, uint8_t reg)
set resistance heat
uint8_t bme680_set_gas_wait(bme680_handle_t *handle, uint8_t index, uint8_t reg)
set gas wait
uint8_t bme680_resistance_heat_convert_to_register(bme680_handle_t *handle, float degree_celsius, uint8_t *reg)
convert the resistance heat to the register raw data
uint8_t bme680_init(bme680_handle_t *handle)
initialize the chip
bme680_address_t
bme680 address enumeration definition
uint8_t bme680_idac_heat_convert_to_register(bme680_handle_t *handle, float ma, uint8_t *reg)
convert the idac heat to the register raw data
uint8_t bme680_set_spi_wire(bme680_handle_t *handle, bme680_spi_wire_t spi)
set spi wire
uint8_t bme680_set_addr_pin(bme680_handle_t *handle, bme680_address_t addr_pin)
set the iic address pin
uint8_t bme680_set_pressure_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set pressure oversampling
uint8_t bme680_set_mode(bme680_handle_t *handle, bme680_mode_t mode)
set mode
struct bme680_handle_s bme680_handle_t
bme680 handle structure definition
uint8_t bme680_set_humidity_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set humidity oversampling
@ BME680_MODE_SLEEP
@ BME680_BOOL_TRUE
@ BME680_BOOL_FALSE
uint8_t bme680_gas_deinit(void)
gas example deinit
uint8_t bme680_gas_read(float idac_ma, float degree_celsius, uint16_t gas_wait_ms, uint8_t index, float *temperature, float *pressure, float *humidity_percentage, float *ohms)
gas example read
#define BME680_GAS_DEFAULT_FILTER
uint8_t bme680_gas_init(bme680_interface_t interface, bme680_address_t addr_pin)
gas example init
#define BME680_GAS_DEFAULT_TEMPERATURE_OVERSAMPLING
bme680 gas example default definition
#define BME680_GAS_DEFAULT_PRESSURE_OVERSAMPLING
#define BME680_GAS_DEFAULT_SPI_WIRE
#define BME680_GAS_DEFAULT_HUMIDITY_OVERSAMPLING
uint8_t bme680_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void bme680_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t bme680_interface_iic_init(void)
interface iic bus init
uint8_t bme680_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t bme680_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void bme680_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t bme680_interface_spi_init(void)
interface spi bus init
uint8_t bme680_interface_iic_deinit(void)
interface iic bus deinit
uint8_t bme680_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t bme680_interface_spi_deinit(void)
interface spi bus deinit