Skip to content

Commit 6b9414c

Browse files
committed
add read measurement convenience method again
and use the method in the example
1 parent ff925f3 commit 6b9414c

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

example-usage/scd4x_i2c_example_usage.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ int main(void) {
9999
//
100100
bool data_ready = false;
101101
uint16_t co2_concentration = 0;
102-
uint16_t temperature = 0;
103-
uint16_t relative_humidity = 0;
102+
int32_t temperature = 0;
103+
int32_t relative_humidity = 0;
104104
uint16_t repetition = 0;
105105
for (repetition = 0; repetition < 50; repetition++) {
106106
//
@@ -124,17 +124,17 @@ int main(void) {
124124
continue;
125125
}
126126
}
127-
error = scd4x_read_measurement_raw(&co2_concentration, &temperature,
128-
&relative_humidity);
127+
error = scd4x_read_measurement(&co2_concentration, &temperature,
128+
&relative_humidity);
129129
if (error != NO_ERROR) {
130-
printf("error executing read_measurement_raw(): %i\n", error);
130+
printf("error executing read_measurement(): %i\n", error);
131131
continue;
132132
}
133133
//
134134
// Print results in physical units.
135135
printf("CO2 concentration [ppm]: %u\n", co2_concentration);
136-
printf("Temperature ticks: %u\n", temperature);
137-
printf("Humidity ticks: %u\n", relative_humidity);
136+
printf("Temperature [m°C] : %i\n", temperature);
137+
printf("Humidity [mRH]: %i\n", relative_humidity);
138138
}
139139

140140
return NO_ERROR;

scd4x_i2c.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@ int16_t scd4x_read_measurement_raw(uint16_t* co2_concentration,
159159
return local_error;
160160
}
161161

162+
int16_t scd4x_read_measurement(uint16_t* co2, int32_t* temperature_m_deg_c,
163+
int32_t* humidity_m_percent_rh) {
164+
int16_t error;
165+
uint16_t temperature;
166+
uint16_t humidity;
167+
error = scd4x_read_measurement_raw(co2, &temperature, &humidity);
168+
if (error) {
169+
return error;
170+
}
171+
*temperature_m_deg_c = ((21875 * (int32_t)temperature) >> 13) - 45000;
172+
*humidity_m_percent_rh = ((12500 * (int32_t)humidity) >> 13);
173+
return NO_ERROR;
174+
}
175+
162176
int16_t scd4x_stop_periodic_measurement() {
163177
int16_t local_error = NO_ERROR;
164178
uint8_t* buffer_ptr = communication_buffer;

scd4x_i2c.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,21 @@ int16_t scd4x_read_measurement_raw(uint16_t* co2_concentration,
195195
uint16_t* temperature,
196196
uint16_t* relative_humidity);
197197

198+
/**
199+
* @brief Read sensor output and convert to pyhsical unit.
200+
*
201+
* See @ref scd4x_read_measurement_raw() for more details.
202+
*
203+
* @param[out] co2 CO₂ concentration in ppm
204+
* @param[out] temperature_m_deg_c Temperature in milli degrees celsius (°C *
205+
* 1000)
206+
* @param[out] humidity_m_percent_rh Relative humidity in milli percent RH
207+
* (%RH * 1000)
208+
* @return 0 on success, an error code otherwise
209+
*/
210+
int16_t scd4x_read_measurement(uint16_t* co2, int32_t* temperature_m_deg_c,
211+
int32_t* humidity_m_percent_rh);
212+
198213
/**
199214
* @brief Stop periodic measurement to change the sensor configuration or to
200215
* save power.

0 commit comments

Comments
 (0)