Re-order MODBUS registers; add Fahrenheit
This commit is contained in:
parent
399d6ba8c5
commit
d386d05fb7
@ -102,6 +102,7 @@ int8_t uart_enable_interrupts(void);
|
||||
#define MEASUREMENT_PERIOD_S 6
|
||||
#define RESET_MAGIC_NUMBER 0xABCD
|
||||
#define MODBUS_ASSERT(x) if (x == 0) return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED
|
||||
#define CELSIUS_TO_FAHRENHEIT(x) (x * 9 / 5 + 320)
|
||||
|
||||
extern uint16_t usart2_rx_message_index;
|
||||
extern uint16_t usart2_rx_message_len;
|
||||
|
@ -72,25 +72,28 @@ const uint16_t tim21_period = MEASUREMENT_PERIOD_S * (SYSTEM_CLOCK_HZ / tim21_pr
|
||||
/* Input registers memory map implementation */
|
||||
enum
|
||||
{
|
||||
REGISTER_NUM_CO2 = 30010, /* ppm */
|
||||
REGISTER_NUM_T_SHT4x = 30011, /* deg C */
|
||||
REGISTER_NUM_RH_SHT4x = 30012, /* % */
|
||||
REGISTER_NUM_T_SCD4x = 30013, /* deg C */
|
||||
REGISTER_NUM_RH_SCD4x = 30014, /* % */
|
||||
REGISTER_NUM_T_SHT4x_SIGNED = 30015, /* deg C */
|
||||
REGISTER_NUM_T_SCD4x_SIGNED = 30016, /* deg C */
|
||||
REGISTER_NUM_PMC_MASS_1_0 = 30017, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_MASS_2_5 = 30018, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_MASS_4_0 = 30019, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_MASS_10_0 = 30020, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_0_5 = 30021, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_1_0 = 30022, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_2_5 = 30023, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_4_0 = 30024, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_10_0 = 30025, /* 1 / m^3 */
|
||||
REGISTER_NUM_TYPICAL_PARTICLE_SIZE = 30026, /* nm */
|
||||
REGISTER_NUM_VOC_RAW = 30027, /* raw VOC ticks */
|
||||
REGISTER_NUM_VOC_INDEX = 30028 /* VOC index as calculated by Sensirion library (1 to 500, average 100) */
|
||||
REGISTER_NUM_T = 30010, /* deg C */
|
||||
REGISTER_NUM_T_F = 30011, /* deg F */
|
||||
REGISTER_NUM_RH = 30012, /* %, from SHT4x */
|
||||
REGISTER_NUM_CO2 = 30013, /* ppm */
|
||||
REGISTER_NUM_VOC_INDEX = 30014, /* VOC index as calculated by Sensirion library (1 to 500, average 100) */
|
||||
REGISTER_NUM_VOC_TICKS = 30015, /* raw VOC ticks */
|
||||
REGISTER_NUM_NOX_INDEX = 30016,
|
||||
REGISTER_NUM_NOX_TICKS = 30017,
|
||||
REGISTER_NUM_PMC_MASS_1_0 = 30018, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_MASS_2_5 = 30019, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_MASS_4_0 = 30020, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_MASS_10_0 = 30021, /* ug / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_0_5 = 30022, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_1_0 = 30023, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_2_5 = 30024, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_4_0 = 30025, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_10_0 = 30026, /* 1 / m^3 */
|
||||
REGISTER_NUM_TYPICAL_PARTICLE_SIZE = 30027, /* nm */
|
||||
REGISTER_NUM_T_SCD4x = 30028, /* deg C */
|
||||
REGISTER_NUM_T_SCD4x_F = 30029, /* deg F */
|
||||
REGISTER_NUM_RH_SCD4x = 30030 /* % */
|
||||
|
||||
/* VOC Index has initial blackout beriod, when the data is not ready. VOC index is 0 during this period */
|
||||
} data_registers_numbers;
|
||||
|
||||
@ -117,7 +120,7 @@ enum
|
||||
} identification_registers_numbers;
|
||||
|
||||
/* Variables to store the measured data */
|
||||
int16_t T_SCD4x, T_SHT4x;
|
||||
int16_t T_SCD4x, T_SHT4x, TF_SCD4x, TF_SHT4x;
|
||||
uint16_t CO2, RH_SCD4x, RH_SHT4x;
|
||||
sps30_data_t PM_SPS30;
|
||||
/* VOC related varibles */
|
||||
@ -354,7 +357,7 @@ int main(void)
|
||||
/* TODO: Check the data */
|
||||
/* Read SHT4x data (always connected) */
|
||||
sht4x_measure(&T_SHT4x, &RH_SHT4x);
|
||||
|
||||
TF_SHT4x = CELSIUS_TO_FAHRENHEIT(T_SHT4x);
|
||||
/* Read SCD4x data (if connected) */
|
||||
if (scd4x_is_connected == 1)
|
||||
{
|
||||
@ -362,6 +365,7 @@ int main(void)
|
||||
/* read failed, either I2C fail or CRC error */
|
||||
// TODO something
|
||||
}
|
||||
TF_SCD4x = CELSIUS_TO_FAHRENHEIT(T_SCD4x);
|
||||
if (CO2 > 0) {
|
||||
co2_valid = 1;
|
||||
} else {
|
||||
@ -871,26 +875,25 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction)
|
||||
{
|
||||
switch (register_number)
|
||||
{
|
||||
case REGISTER_NUM_T:
|
||||
transaction->input_registers_signed[i] = (int16_t)T_SHT4x;
|
||||
break;
|
||||
case REGISTER_NUM_T_F:
|
||||
transaction->input_registers_signed[i] = (int16_t)TF_SHT4x;
|
||||
break;
|
||||
case REGISTER_NUM_RH:
|
||||
transaction->input_registers[i] = (uint16_t)RH_SHT4x;
|
||||
break;
|
||||
case REGISTER_NUM_CO2:
|
||||
transaction->input_registers[i] = (uint16_t)CO2;
|
||||
break;
|
||||
case REGISTER_NUM_T_SHT4x:
|
||||
transaction->input_registers[i] = (uint16_t)T_SHT4x;
|
||||
case REGISTER_NUM_VOC_INDEX:
|
||||
MODBUS_ASSERT(sgp40_is_connected);
|
||||
transaction->input_registers[i] = (uint16_t)voc_index;
|
||||
break;
|
||||
case REGISTER_NUM_RH_SHT4x:
|
||||
transaction->input_registers[i] = (uint16_t)RH_SHT4x;
|
||||
break;
|
||||
case REGISTER_NUM_T_SCD4x:
|
||||
transaction->input_registers[i] = (uint16_t)T_SCD4x;
|
||||
break;
|
||||
case REGISTER_NUM_RH_SCD4x:
|
||||
transaction->input_registers[i] = (uint16_t)RH_SCD4x;
|
||||
break;
|
||||
case REGISTER_NUM_T_SHT4x_SIGNED:
|
||||
transaction->input_registers_signed[i] = (int16_t)T_SHT4x;
|
||||
break;
|
||||
case REGISTER_NUM_T_SCD4x_SIGNED:
|
||||
transaction->input_registers_signed[i] = (int16_t)T_SCD4x;
|
||||
case REGISTER_NUM_VOC_TICKS:
|
||||
MODBUS_ASSERT(sgp40_is_connected);
|
||||
transaction->input_registers[i] = (uint16_t)voc_ticks_compensated;
|
||||
break;
|
||||
case REGISTER_NUM_PMC_MASS_1_0:
|
||||
MODBUS_ASSERT(sps30_is_connected);
|
||||
@ -932,13 +935,14 @@ 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_VOC_RAW:
|
||||
MODBUS_ASSERT(sgp40_is_connected);
|
||||
transaction->input_registers[i] = (uint16_t)voc_ticks_compensated;
|
||||
case REGISTER_NUM_T_SCD4x:
|
||||
transaction->input_registers_signed[i] = (int16_t)T_SCD4x;
|
||||
break;
|
||||
case REGISTER_NUM_VOC_INDEX:
|
||||
MODBUS_ASSERT(sgp40_is_connected);
|
||||
transaction->input_registers[i] = (uint16_t)voc_index;
|
||||
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;
|
||||
default:
|
||||
return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED;
|
||||
|
@ -28,9 +28,14 @@ int8_t scd4x_send_cmd(scd4x_cmd_t cmd)
|
||||
int8_t scd4x_get_serial(uint8_t serial[6])
|
||||
{
|
||||
uint8_t buffer[16];
|
||||
int result;
|
||||
|
||||
scd4x_send_cmd(SCD4X_GET_SERIAL_NUMBER);
|
||||
i2c_receive(SCD4X_I2C_ADDRESS << 1, buffer, 9);
|
||||
result = i2c_receive(SCD4X_I2C_ADDRESS << 1, buffer, 9);
|
||||
if (result != I2C_OK) {
|
||||
return SCD4X_ERROR;
|
||||
}
|
||||
return SCD4X_OK;
|
||||
}
|
||||
|
||||
int8_t scd4x_read_data(uint8_t *buffer, int len)
|
||||
|
Loading…
Reference in New Issue
Block a user