#include "Arduino.h" #include "Metro.h" #include "ads1210.h" #include "led.h" #include "SimpleModbusSlave.h" const uint8_t LED_PIN = 8; const uint8_t ADC_CS_PIN = 9; const uint8_t ADC_RDY_PIN = 7; const uint8_t MODBUS_TX_ENABLE_PIN = 6; const uint8_t MODBUS_ID = 3; ADS1210 ads1210; LED led; Metro secondTick = Metro(1000); uint32_t uptimeSeconds; struct { union { uint32_t in; uint16_t modbusRegisters[2]; // 0, 1 } adcValue; union { uint32_t in; uint16_t modbusRegisters[2]; // 2, 3 } uptimeSeconds; } modbusHoldingRegisters; void setup() { led.begin(LED_PIN); ads1210.begin(ADC_CS_PIN, ADC_RDY_PIN); modbus_configure(&Serial, 1200, SERIAL_8N2, MODBUS_ID, MODBUS_TX_ENABLE_PIN, sizeof(modbusHoldingRegisters), modbusHoldingRegisters) uptimeSeconds = 0; } void loop() { modbus_update(); ads1210.exec(); modbusHoldingRegisters.adcValue.in = ads1210.value; if (secondTick.check() == 1) { led.toggle(); uptimeSeconds++; modbusHoldingRegisters.uptimeSeconds.in = uptimeSeconds; } }