@@ -30,7 +30,8 @@ class SensorThermistor: public Sensor {
30
30
int _b_coefficient = 3950 ;
31
31
long _series_resistor = 10000 ;
32
32
float _offset = 0 ;
33
-
33
+ bool _ntc = false ;
34
+
34
35
public:
35
36
SensorThermistor (int8_t pin, uint8_t child_id = 0 ): Sensor(pin) {
36
37
_name = " THERMISTOR" ;
@@ -58,6 +59,10 @@ class SensorThermistor: public Sensor {
58
59
void setOffset (float value) {
59
60
_offset = value;
60
61
};
62
+ // [106] set type of thermistor 0 for PTC, 1 for NTC (default: 0)
63
+ void setNtc (bool ntc){
64
+ _ntc = ntc;
65
+ };
61
66
62
67
// define what to do during setup
63
68
void onSetup () {
@@ -71,7 +76,12 @@ class SensorThermistor: public Sensor {
71
76
float adc = analogRead (_pin);
72
77
// calculate the temperature
73
78
float reading = (1023 / adc) - 1 ;
74
- reading = _series_resistor / reading;
79
+ if (_ntc == false ){
80
+ reading = _series_resistor / reading;
81
+ }
82
+ else {
83
+ reading = _series_resistor * reading;
84
+ }
75
85
float temperature;
76
86
temperature = reading / _nominal_resistor; // (R/Ro)
77
87
temperature = log (temperature); // ln(R/Ro)
@@ -80,6 +90,7 @@ class SensorThermistor: public Sensor {
80
90
temperature = 1.0 / temperature; // Invert
81
91
temperature -= 273.15 ; // convert to C
82
92
temperature = nodeManager.celsiusToFahrenheit (temperature);
93
+ temperature += _offset;
83
94
// store the value
84
95
child->setValue (temperature);
85
96
};
@@ -93,6 +104,7 @@ class SensorThermistor: public Sensor {
93
104
case 103 : setBCoefficient (request->getValueInt ()); break ;
94
105
case 104 : setSeriesResistor ((long )request->getValueInt ()); break ;
95
106
case 105 : setOffset (request->getValueFloat ()); break ;
107
+ case 106 : setNtc (request->getValueInt ()); break ;
96
108
default : return ;
97
109
}
98
110
};
0 commit comments