From 7965e6ab204c4e88094b518e3f627589f39e21fa Mon Sep 17 00:00:00 2001 From: Jeonghoon Park Date: Fri, 10 Aug 2018 12:20:32 +0900 Subject: [PATCH] bug fix for calculating ppm --- src/co2-sensor.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/co2-sensor.c b/src/co2-sensor.c index ce85c21..7b6cad5 100644 --- a/src/co2-sensor.c +++ b/src/co2-sensor.c @@ -36,7 +36,7 @@ static const double log400 = 2.602; static bool initialized = false; static double co2_zp_volt = -1; -static double slope_value = -1; +static double slope_value = 10000; void co2_sensor_close(void) { @@ -65,9 +65,7 @@ int co2_sensor_read(int ch_num, unsigned int *out_value) static inline double __value_to_volt(unsigned int value) { - return (double)value - * (double)(CO2_SENSOR_REF_VOLTAGE / CO2_SENSOR_VALUE_MAX) - / CO2_SENSOR_VOLTAGE_GAIN; + return (double)value * CO2_SENSOR_REF_VOLTAGE / CO2_SENSOR_VALUE_MAX / CO2_SENSOR_VOLTAGE_GAIN; } static double __calc_slope(double zp_volt, double sec_volt, double x_axis_diff) @@ -82,13 +80,12 @@ int co2_sensor_set_calibration_values(unsigned int zero_point_v, double sec_volt = -1; double x_axis_diff = -1; - retv_if(zero_point_v <= second_point_v, -1); + retvm_if(zero_point_v <= second_point_v, -1, "%u - %u", zero_point_v, second_point_v); retv_if(second_point_ppm <= 400, -1); co2_zp_volt = __value_to_volt(zero_point_v); sec_volt = __value_to_volt(second_point_v); - x_axis_diff = log400 - log(second_point_ppm); - + x_axis_diff = log400 - log10(second_point_ppm); slope_value = __calc_slope(co2_zp_volt, sec_volt, x_axis_diff); return 0; @@ -110,14 +107,16 @@ unsigned int co2_sensor_voltage_to_ppm(double voltage) /* Example */ #ifdef USE_EXAMPLE_CODE - if (slope_value < 0) + if (slope_value > 0) co2_sensor_set_calibration_values(CO2_SENSOR_DEFAULT_VALUE_ZP, - CO2_SENSOR_DEFAULT_VALUE_1000, 1000); + 1000, CO2_SENSOR_DEFAULT_VALUE_1000); if (voltage >= co2_zp_volt) return 400; ppm = pow(10, (voltage - co2_zp_volt)/slope_value + log400); +// if (ppm > 10000) +// ppm = 10000; #endif return (unsigned int)ppm; -- 2.7.4