#include "Arduino.h" #include "Metro.h" #include "ads1210.h" #include "led.h" #include "SimpleModbusSlave.h" #include "Thermometer.h" #include "Config.h" const uint8_t LED_PIN = 8; const uint8_t ADC_1_CS_PIN = 9; const uint8_t ADC_1_RDY_PIN = 7; const uint8_t ADC_2_CS_PIN = 2; const uint8_t ADC_2_RDY_PIN = 3; const uint8_t MODBUS_TX_ENABLE_PIN = 6; const uint8_t MODBUS_ID = 3; const uint32_t MODBUS_BAUD = 1200; ADS1210 ads1210_1; ADS1210 ads1210_2; Thermometer thermometer1; Thermometer thermometer2; LED led; Metro secondTick = Metro(1000); uint32_t uptimeSeconds; struct { union { uint32_t in; uint16_t modbusRegisters[2]; // 0, 1 } adc1Value; union { float in; uint16_t modbusRegisters[2]; // 2, 3 } adc1U; union { float in; uint16_t modbusRegisters[2]; // 4, 5 } adc1R; union { float in; uint16_t modbusRegisters[2]; // 6, 7 } temperature1Raw; union { float in; uint16_t modbusRegisters[2]; // 8, 9 } temperature1; union { uint32_t in; uint16_t modbusRegisters[2]; // 10, 11 } adc2Value; union { float in; uint16_t modbusRegisters[2]; // 12, 13 } adc2U; union { float in; uint16_t modbusRegisters[2]; // 14, 15 } adc2R; union { float in; uint16_t modbusRegisters[2]; // 16, 17 } temperature2Raw; union { float in; uint16_t modbusRegisters[2]; // 18, 19 } temperature2; union { uint32_t in; uint16_t modbusRegisters[2]; // 20, 21 } uptimeSeconds; } modbusHoldingRegisters; void setup() { delay(100); Config::initialize(); led.begin(LED_PIN); ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN, Config::ADC1START); ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN, Config::ADC2START); thermometer1.begin(Config::THERMO1START); thermometer2.begin(Config::THERMO2START); modbus_configure(&Serial, MODBUS_BAUD, SERIAL_8N2, MODBUS_ID, MODBUS_TX_ENABLE_PIN, sizeof(modbusHoldingRegisters), (uint16_t*)(&modbusHoldingRegisters)); uptimeSeconds = 0; } void loop() { modbus_update(); ads1210_1.exec(); modbusHoldingRegisters.adc1Value.in = ads1210_1.value; modbusHoldingRegisters.adc1U.in = ads1210_1.u; modbusHoldingRegisters.adc1R.in = ads1210_1.r; thermometer1.exec(ads1210_1.r); modbusHoldingRegisters.temperature1Raw.in = thermometer1.temperatureRaw; modbusHoldingRegisters.temperature1.in = thermometer1.temperature; ads1210_2.exec(); modbusHoldingRegisters.adc2Value.in = ads1210_2.value; modbusHoldingRegisters.adc2U.in = ads1210_2.u; modbusHoldingRegisters.adc2R.in = ads1210_2.r; thermometer2.exec(ads1210_2.r); modbusHoldingRegisters.temperature2Raw.in = thermometer2.temperatureRaw; modbusHoldingRegisters.temperature2.in = thermometer2.temperature; if (secondTick.check() == 1) { led.toggle(); uptimeSeconds++; modbusHoldingRegisters.uptimeSeconds.in = uptimeSeconds; } }