diff --git a/fw/Core/Src/main.c b/fw/Core/Src/main.c index cb0ab20..c4f630e 100644 --- a/fw/Core/Src/main.c +++ b/fw/Core/Src/main.c @@ -90,9 +90,11 @@ enum REGISTER_NUM_PMC_NUMBER_4_0 = 30016, /* 1 / m^3 */ REGISTER_NUM_PMC_NUMBER_10_0 = 30017, /* 1 / m^3 */ REGISTER_NUM_TYPICAL_PARTICLE_SIZE = 30018, /* nm */ - REGISTER_NUM_T_SCD4x = 30019, /* deg C */ - REGISTER_NUM_T_SCD4x_F = 30020, /* deg F */ - REGISTER_NUM_RH_SCD4x = 30021 /* % */ + REGISTER_NUM_READ_ERR_T = 30019, /* deg C */ + REGISTER_NUM_READ_ERR_RH = 30020, /* deg C */ + REGISTER_NUM_READ_ERR_CO2 = 30021, /* deg C */ + REGISTER_NUM_READ_ERR_VOC = 30022, /* deg C */ + REGISTER_NUM_READ_ERR_PMC = 30023, /* deg C */ /* VOC Index has initial blackout beriod, when the data is not ready. VOC index is 0 during this period */ } data_registers_numbers; @@ -148,6 +150,12 @@ uint8_t sps30_is_connected = 0; uint8_t sgp40_is_connected = 0; /* Sensirion library for VOC */ GasIndexAlgorithmParams voc_params; +/* Sensor return value variables */ +int8_t read_error_temperature; +int8_t read_error_rh; +int8_t read_error_co2; +int8_t read_error_voc; +int8_t read_error_pmc; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -461,12 +469,12 @@ int main(void) { /* TODO: Check the data */ /* Read SHT4x data (always connected) */ - sht4x_measure(&T_SHT4x, &RH_SHT4x); + read_error_temperature = read_error_rh = sht4x_measure(&T_SHT4x, &RH_SHT4x); TF_SHT4x = CELSIUS_TO_FAHRENHEIT(T_SHT4x); /* Read SCD4x data (if connected) */ if (scd4x_is_connected == 1) { - if (scd4x_read_measurement(&CO2, &T_SCD4x, &RH_SCD4x) != SCD4X_OK) { + if ((read_error_co2 = scd4x_read_measurement(&CO2, &T_SCD4x, &RH_SCD4x)) != SCD4X_OK) { /* read failed, either I2C fail or CRC error */ // TODO something } @@ -481,7 +489,7 @@ int main(void) /* Read SPS30 data (if connected) */ if (sps30_is_connected == 1) { - sps30_read_measured_values(&PM_SPS30); + read_error_pmc = sps30_read_measured_values(&PM_SPS30); } /* TODO: Process data and light a desired color of LED */ /* TODO: Add hystheresis */ @@ -490,7 +498,7 @@ int main(void) if (sgp40_is_connected == 1) { //sgp40_measure_raw_signal(&voc_ticks); - sgp40_measure_raw_signal_compensated(&voc_ticks_compensated, RH_SHT4x, T_SHT4x); + read_error_voc = sgp40_measure_raw_signal_compensated(&voc_ticks_compensated, RH_SHT4x, T_SHT4x); // sgp40_measure_raw_signal(&voc_ticks); /* Sensirion VOC library */ GasIndexAlgorithm_process(&voc_params, voc_ticks_compensated, (int32_t*)&voc_index); @@ -1040,21 +1048,27 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction) MODBUS_ASSERT(sps30_is_connected); transaction->input_registers[i] = (uint16_t)PM_SPS30.typical_particle_size; break; - case REGISTER_NUM_T_SCD4x: - transaction->input_registers_signed[i] = (int16_t)T_SCD4x; - break; - case REGISTER_NUM_T_SCD4x_F: - transaction->input_registers_signed[i] = (int16_t)TF_SCD4x; - break; - case REGISTER_NUM_RH_SCD4x: - transaction->input_registers[i] = (uint16_t)RH_SCD4x; - break; case REGISTER_NUM_SERIAL_NUMBER_1: transaction->input_registers[i] = (uint16_t)sensor_config.serial_number_1; break; case REGISTER_NUM_SERIAL_NUMBER_2: transaction->input_registers[i] = (uint16_t)sensor_config.serial_number_2; break; + case REGISTER_NUM_READ_ERR_T: + transaction->input_registers[i] = (uint16_t)read_error_temperature; + break; + case REGISTER_NUM_READ_ERR_RH: + transaction->input_registers[i] = (uint16_t)read_error_rh; + break; + case REGISTER_NUM_READ_ERR_CO2: + transaction->input_registers[i] = (uint16_t)read_error_co2; + break; + case REGISTER_NUM_READ_ERR_VOC: + transaction->input_registers[i] = (uint16_t)read_error_voc; + break; + case REGISTER_NUM_READ_ERR_PMC: + transaction->input_registers[i] = (uint16_t)read_error_pmc; + break; default: return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; }