94 lines
1.9 KiB
C++
94 lines
1.9 KiB
C++
#include "Arduino.h"
|
|
|
|
#include "Metro.h"
|
|
|
|
#include "ads1210.h"
|
|
#include "led.h"
|
|
#include "SimpleModbusSlave.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;
|
|
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 {
|
|
uint32_t in;
|
|
uint16_t modbusRegisters[2]; // 6, 7
|
|
} adc2Value;
|
|
union {
|
|
float in;
|
|
uint16_t modbusRegisters[2]; // 8, 9
|
|
} adc2U;
|
|
union {
|
|
float in;
|
|
uint16_t modbusRegisters[2]; // 10, 11
|
|
} adc2R;
|
|
union {
|
|
uint32_t in;
|
|
uint16_t modbusRegisters[2]; // 12, 13
|
|
} uptimeSeconds;
|
|
} modbusHoldingRegisters;
|
|
|
|
|
|
void setup() {
|
|
delay(100);
|
|
Config::initialize();
|
|
led.begin(LED_PIN);
|
|
ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN);
|
|
ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN);
|
|
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;
|
|
|
|
|
|
ads1210_2.exec();
|
|
modbusHoldingRegisters.adc2Value.in = ads1210_2.value;
|
|
modbusHoldingRegisters.adc2U.in = ads1210_2.u;
|
|
modbusHoldingRegisters.adc2R.in = ads1210_2.r;
|
|
|
|
if (secondTick.check() == 1) {
|
|
led.toggle();
|
|
uptimeSeconds++;
|
|
modbusHoldingRegisters.uptimeSeconds.in = uptimeSeconds;
|
|
}
|
|
}
|