r, u, t
This commit is contained in:
@ -19,6 +19,7 @@ const uint8_t MODBUS_ID = 3;
|
||||
const uint32_t MODBUS_BAUD = 1200;
|
||||
|
||||
|
||||
|
||||
ADS1210 ads1210_1;
|
||||
ADS1210 ads1210_2;
|
||||
LED led;
|
||||
@ -32,16 +33,36 @@ struct {
|
||||
uint16_t modbusRegisters[2]; // 0, 1
|
||||
} adc1Value;
|
||||
union {
|
||||
uint32_t in;
|
||||
float in;
|
||||
uint16_t modbusRegisters[2]; // 2, 3
|
||||
} adc2Value;
|
||||
} adc1U;
|
||||
union {
|
||||
float in;
|
||||
uint16_t modbusRegisters[2]; // 4, 5
|
||||
} adc1R;
|
||||
union {
|
||||
uint32_t in;
|
||||
uint16_t modbusRegisters[2]; // 4, 5
|
||||
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;
|
||||
|
||||
|
||||
float pt1000(float r) {
|
||||
return (r / PT1000_R0 - 1) / PT1000_Coeff;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
delay(100);
|
||||
led.begin(LED_PIN);
|
||||
@ -57,9 +78,14 @@ void loop() {
|
||||
|
||||
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();
|
||||
|
19
Thermometer.cpp
Normal file
19
Thermometer.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
#include "Thermometer.h"
|
||||
|
||||
using Thermometer;
|
||||
|
||||
Thermometer::Thermometer() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Thermometer::begin() {
|
||||
m_lastSmoothedTemperature = 0.0;
|
||||
}
|
||||
|
||||
|
||||
void Thermometer::exec(float r) {
|
||||
temperatureRaw = (r / PT1000_R0 - 1) / PT1000_Coeff;
|
||||
|
||||
|
||||
}
|
28
Thermometer.h
Normal file
28
Thermometer.h
Normal file
@ -0,0 +1,28 @@
|
||||
#ifndef _THERMOMETER_H_
|
||||
#define _THERMOMETER_H_
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <stdint.h>
|
||||
|
||||
namespace {
|
||||
const float R_REF = 3000.0;
|
||||
const float PT1000_R0 = 1000.0;
|
||||
const float PT1000_Coeff = 3.85e-3;
|
||||
|
||||
const float ALPHA = 0.1;
|
||||
const float CYCLE_TIME = 1000; // ms
|
||||
};
|
||||
|
||||
class Thermometer {
|
||||
public:
|
||||
Thermometer();
|
||||
void begin();
|
||||
void exec(float r);
|
||||
float temperature;
|
||||
float temperatureRaw;
|
||||
private:
|
||||
float m_lastSmoothedTemperature;
|
||||
float m_smoothedTemperature;
|
||||
};
|
||||
|
||||
#endif // _THERMOMETER_H_
|
@ -76,6 +76,9 @@ void ADS1210::exec() {
|
||||
|
||||
value = res.out;
|
||||
|
||||
u = ((float)(value / V_MAX)) * U_REF;
|
||||
r = (((float)(V_MAX / value)) - 1.0) * R_REF;
|
||||
|
||||
if (value == 0) {
|
||||
// fatal(2);
|
||||
}
|
||||
|
@ -14,7 +14,9 @@ public:
|
||||
void begin(uint8_t csPin, uint8_t drdyPin);
|
||||
void exec();
|
||||
|
||||
uint32_t value;
|
||||
uint32_t value;
|
||||
float u;
|
||||
float r;
|
||||
private:
|
||||
// register addresses
|
||||
const uint8_t ADDR_DOR2 = 0x00;
|
||||
@ -68,6 +70,11 @@ private:
|
||||
const uint8_t INSR_MB0 = 0x20;
|
||||
const uint8_t INSR_ADDR = 0x0f;
|
||||
|
||||
const float U_REF = 2.5;
|
||||
const uint32_t V_MAX = 0x3FFFFF;
|
||||
const float R_REF = 3000.0;
|
||||
|
||||
|
||||
uint8_t m_csPin;
|
||||
uint8_t m_drdyPin;
|
||||
|
||||
|
Reference in New Issue
Block a user