array of channels and config stuff
This commit is contained in:
10
Config.cpp
10
Config.cpp
@ -44,14 +44,10 @@ void Config::setMagic() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Config::initialize() {
|
void Config::initialize() {
|
||||||
|
bool res = false;
|
||||||
if (! isInitialized()) {
|
if (! isInitialized()) {
|
||||||
setFloat(ADC1START, 0.0);
|
res = true;
|
||||||
setFloat(ADC1START + 4, 1.0);
|
|
||||||
setFloat(ADC2START, 0.0);
|
|
||||||
setFloat(ADC2START + 4, 1.0);
|
|
||||||
setFloat(THERMO1START, 1.0);
|
|
||||||
setFloat(THERMO2START, 1.0);
|
|
||||||
|
|
||||||
setMagic();
|
setMagic();
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
3
Config.h
3
Config.h
@ -24,13 +24,12 @@ namespace Config {
|
|||||||
const int THERMO1START = 20;
|
const int THERMO1START = 20;
|
||||||
const int THERMO2START = 24;
|
const int THERMO2START = 24;
|
||||||
|
|
||||||
void initialize();
|
bool initialize();
|
||||||
bool isInitialized();
|
bool isInitialized();
|
||||||
float getFloat(int pos);
|
float getFloat(int pos);
|
||||||
void setFloat(int pos, float value);
|
void setFloat(int pos, float value);
|
||||||
uint32_t getUInt32(int pos);
|
uint32_t getUInt32(int pos);
|
||||||
void setUInt32(int pos, uint32_t value);
|
void setUInt32(int pos, uint32_t value);
|
||||||
|
|
||||||
void setMagic();
|
void setMagic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,72 +23,53 @@ const uint8_t MODBUS_ID = 3;
|
|||||||
const uint32_t MODBUS_BAUD = 1200;
|
const uint32_t MODBUS_BAUD = 1200;
|
||||||
|
|
||||||
|
|
||||||
|
const uint8_t NUM_OF_CHANNELS = 2;
|
||||||
|
|
||||||
ADS1210 ads1210_1;
|
ADS1210 ads1210[NUM_OF_CHANNELS];
|
||||||
ADS1210 ads1210_2;
|
Thermometer thermometer[NUM_OF_CHANNELS];
|
||||||
Thermometer thermometer1;
|
|
||||||
Thermometer thermometer2;
|
|
||||||
LED led;
|
LED led;
|
||||||
Metro secondTick = Metro(1000);
|
Metro secondTick = Metro(1000);
|
||||||
uint32_t uptimeSeconds;
|
uint32_t uptimeSeconds;
|
||||||
|
|
||||||
|
|
||||||
|
struct {
|
||||||
struct {
|
struct {
|
||||||
union {
|
union {
|
||||||
uint32_t in;
|
uint32_t in;
|
||||||
uint16_t modbusRegisters[2]; // 0, 1
|
uint16_t modbusRegisters[2];
|
||||||
} adc1Value;
|
} adcValue;
|
||||||
union {
|
union {
|
||||||
float in;
|
float in;
|
||||||
uint16_t modbusRegisters[2]; // 2, 3
|
uint16_t modbusRegisters[2];
|
||||||
} adc1U;
|
} adcU;
|
||||||
union {
|
union {
|
||||||
float in;
|
float in;
|
||||||
uint16_t modbusRegisters[2]; // 4, 5
|
uint16_t modbusRegisters[2];
|
||||||
} adc1R;
|
} adcR;
|
||||||
union {
|
union {
|
||||||
float in;
|
float in;
|
||||||
uint16_t modbusRegisters[2]; // 6, 7
|
uint16_t modbusRegisters[2];
|
||||||
} temperature1Raw;
|
} temperatureRaw;
|
||||||
union {
|
union {
|
||||||
float in;
|
float in;
|
||||||
uint16_t modbusRegisters[2]; // 8, 9
|
uint16_t modbusRegisters[2];
|
||||||
} temperature1;
|
} temperature;
|
||||||
|
} channelVariables[NUM_OF_CHANNELS];
|
||||||
union {
|
union {
|
||||||
uint32_t in;
|
uint32_t in;
|
||||||
uint16_t modbusRegisters[2]; // 10, 11
|
uint16_t modbusRegisters[2];
|
||||||
} 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;
|
} uptimeSeconds;
|
||||||
} modbusHoldingRegisters;
|
} modbusHoldingRegisters;
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
delay(100);
|
delay(100);
|
||||||
Config::initialize();
|
bool initializeConfig = Config::initialize();
|
||||||
led.begin(LED_PIN);
|
led.begin(LED_PIN);
|
||||||
ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN, Config::ADC1START);
|
ads1210[0].begin(ADC_1_CS_PIN, ADC_1_RDY_PIN, initializeConfig, Config::ADC1START);
|
||||||
ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN, Config::ADC2START);
|
ads1210[1].begin(ADC_2_CS_PIN, ADC_2_RDY_PIN, initializeConfig, Config::ADC2START);
|
||||||
thermometer1.begin(Config::THERMO1START);
|
thermometer[0].begin(initializeConfig, Config::THERMO1START);
|
||||||
thermometer2.begin(Config::THERMO2START);
|
thermometer[1].begin(initializeConfig, Config::THERMO2START);
|
||||||
modbus_configure(&Serial, MODBUS_BAUD, SERIAL_8N2, MODBUS_ID, MODBUS_TX_ENABLE_PIN,
|
modbus_configure(&Serial, MODBUS_BAUD, SERIAL_8N2, MODBUS_ID, MODBUS_TX_ENABLE_PIN,
|
||||||
sizeof(modbusHoldingRegisters), (uint16_t*)(&modbusHoldingRegisters));
|
sizeof(modbusHoldingRegisters), (uint16_t*)(&modbusHoldingRegisters));
|
||||||
uptimeSeconds = 0;
|
uptimeSeconds = 0;
|
||||||
@ -97,22 +78,16 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
modbus_update();
|
modbus_update();
|
||||||
|
|
||||||
ads1210_1.exec();
|
for (uint8_t i = 0; i < NUM_OF_CHANNELS; i++) {
|
||||||
modbusHoldingRegisters.adc1Value.in = ads1210_1.value;
|
ads1210[i].exec();
|
||||||
modbusHoldingRegisters.adc1U.in = ads1210_1.u;
|
modbusHoldingRegisters.channelVariables[i].adcValue.in = ads1210[i].value;
|
||||||
modbusHoldingRegisters.adc1R.in = ads1210_1.r;
|
modbusHoldingRegisters.channelVariables[i].adcU.in = ads1210[i].u;
|
||||||
thermometer1.exec(ads1210_1.r);
|
modbusHoldingRegisters.channelVariables[i].adcR.in = ads1210[i].r;
|
||||||
modbusHoldingRegisters.temperature1Raw.in = thermometer1.temperatureRaw;
|
|
||||||
modbusHoldingRegisters.temperature1.in = thermometer1.temperature;
|
|
||||||
|
|
||||||
|
thermometer[i].exec(ads1210[i].r);
|
||||||
ads1210_2.exec();
|
modbusHoldingRegisters.channelVariables[i].temperatureRaw.in = thermometer[i].temperatureRaw;
|
||||||
modbusHoldingRegisters.adc2Value.in = ads1210_2.value;
|
modbusHoldingRegisters.channelVariables[i].temperature.in = thermometer[i].temperature;
|
||||||
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) {
|
if (secondTick.check() == 1) {
|
||||||
led.toggle();
|
led.toggle();
|
||||||
|
@ -9,8 +9,13 @@ Thermometer::Thermometer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Thermometer::begin(int eepromAddr) {
|
void Thermometer::begin(bool initializeConfig, int eepromAddr) {
|
||||||
m_eepromAddr = eepromAddr;
|
m_eepromAddr = eepromAddr;
|
||||||
|
|
||||||
|
if (initializeConfig) {
|
||||||
|
// set default values
|
||||||
|
}
|
||||||
|
|
||||||
m_lastSmoothedTemperature = INVALID_TEMPERATURE;
|
m_lastSmoothedTemperature = INVALID_TEMPERATURE;
|
||||||
m_alpha = 0.1;
|
m_alpha = 0.1;
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ namespace nsThermometer {
|
|||||||
class Thermometer {
|
class Thermometer {
|
||||||
public:
|
public:
|
||||||
Thermometer();
|
Thermometer();
|
||||||
void begin(int eepromAddr);
|
void begin(bool initializeConfig, int eepromAddr);
|
||||||
void exec(float r);
|
void exec(float r);
|
||||||
float temperature;
|
float temperature;
|
||||||
float temperatureRaw;
|
float temperatureRaw;
|
||||||
|
@ -99,13 +99,17 @@ void ADS1210::setGain(uint8_t gain) const {
|
|||||||
writeRegister(ADDR_CMR2, cmr);
|
writeRegister(ADDR_CMR2, cmr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ADS1210::begin(uint8_t csPin, uint8_t drdyPin, int eepromAddr) {
|
void ADS1210::begin(uint8_t csPin, uint8_t drdyPin, bool initializeConfig, int eepromAddr) {
|
||||||
static bool onlyOnce = false;
|
static bool onlyOnce = false;
|
||||||
|
|
||||||
m_csPin = csPin;
|
m_csPin = csPin;
|
||||||
m_drdyPin = drdyPin;
|
m_drdyPin = drdyPin;
|
||||||
m_eepromAddr = eepromAddr;
|
m_eepromAddr = eepromAddr;
|
||||||
|
|
||||||
|
if (initializeConfig) {
|
||||||
|
// set default values
|
||||||
|
}
|
||||||
|
|
||||||
// initialization of SPI
|
// initialization of SPI
|
||||||
// Serial << "Start SPI initialization ... ";
|
// Serial << "Start SPI initialization ... ";
|
||||||
pinMode(m_csPin, OUTPUT);
|
pinMode(m_csPin, OUTPUT);
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
class ADS1210 {
|
class ADS1210 {
|
||||||
public:
|
public:
|
||||||
ADS1210() : value(0) {};
|
ADS1210() : value(0) {};
|
||||||
void begin(uint8_t csPin, uint8_t drdyPin, int eepromAddr);
|
void begin(uint8_t csPin, uint8_t drdyPin, bool initializeConfig, int eepromAddr);
|
||||||
void exec();
|
void exec();
|
||||||
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
Reference in New Issue
Block a user