diff --git a/ModbusThermometer.cpp b/ModbusThermometer.cpp index f3125bf..de104a2 100644 --- a/ModbusThermometer.cpp +++ b/ModbusThermometer.cpp @@ -1,36 +1,52 @@ #include "Arduino.h" -// #include "Streaming.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; -void setup() { - // Serial.begin(9600); - delay(1000); - +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(modbusHoldingReigsre), modbusHoldingRegisters) + uptimeSeconds = 0; } void loop() { + modbus_update(); + ads1210.exec(); - + modbusHoldingRegisters.adcValue.in = ads1210.value; + if (secondTick.check() == 1) { led.toggle(); - - // Serial << "AdcValue: " << _HEX(ads1210.value) << endl; + uptimeSeconds++; + modbusHoldingRegisters.uptimeSeconds.in = uptimeSeconds; } }