array of channels and config stuff

This commit is contained in:
Wolfgang Hottgenroth
2014-11-17 19:45:38 +01:00
parent f4cadb46a2
commit 4ea27a7169
7 changed files with 68 additions and 89 deletions

View File

@ -23,72 +23,53 @@ const uint8_t MODBUS_ID = 3;
const uint32_t MODBUS_BAUD = 1200;
const uint8_t NUM_OF_CHANNELS = 2;
ADS1210 ads1210_1;
ADS1210 ads1210_2;
Thermometer thermometer1;
Thermometer thermometer2;
ADS1210 ads1210[NUM_OF_CHANNELS];
Thermometer thermometer[NUM_OF_CHANNELS];
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;
struct {
union {
uint32_t in;
uint16_t modbusRegisters[2];
} adcValue;
union {
float in;
uint16_t modbusRegisters[2];
} adcU;
union {
float in;
uint16_t modbusRegisters[2];
} adcR;
union {
float in;
uint16_t modbusRegisters[2];
} temperatureRaw;
union {
float in;
uint16_t modbusRegisters[2];
} temperature;
} channelVariables[NUM_OF_CHANNELS];
union {
uint32_t in;
uint16_t modbusRegisters[2];
} uptimeSeconds;
} modbusHoldingRegisters;
void setup() {
delay(100);
Config::initialize();
bool initializeConfig = 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);
ads1210[0].begin(ADC_1_CS_PIN, ADC_1_RDY_PIN, initializeConfig, Config::ADC1START);
ads1210[1].begin(ADC_2_CS_PIN, ADC_2_RDY_PIN, initializeConfig, Config::ADC2START);
thermometer[0].begin(initializeConfig, Config::THERMO1START);
thermometer[1].begin(initializeConfig, Config::THERMO2START);
modbus_configure(&Serial, MODBUS_BAUD, SERIAL_8N2, MODBUS_ID, MODBUS_TX_ENABLE_PIN,
sizeof(modbusHoldingRegisters), (uint16_t*)(&modbusHoldingRegisters));
uptimeSeconds = 0;
@ -97,22 +78,16 @@ void setup() {
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;
for (uint8_t i = 0; i < NUM_OF_CHANNELS; i++) {
ads1210[i].exec();
modbusHoldingRegisters.channelVariables[i].adcValue.in = ads1210[i].value;
modbusHoldingRegisters.channelVariables[i].adcU.in = ads1210[i].u;
modbusHoldingRegisters.channelVariables[i].adcR.in = ads1210[i].r;
thermometer[i].exec(ads1210[i].r);
modbusHoldingRegisters.channelVariables[i].temperatureRaw.in = thermometer[i].temperatureRaw;
modbusHoldingRegisters.channelVariables[i].temperature.in = thermometer[i].temperature;
}
if (secondTick.check() == 1) {
led.toggle();