You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
#include "temperature_sensor.h" |
|
|
|
TemperatureSensor::TemperatureSensor(byte pin, int refResistance, double a, double b, double c) { |
|
this->pin = pin; |
|
this->refResistance = refResistance; |
|
this->a = a; |
|
this->b = b; |
|
this->c = c; |
|
init(); |
|
} |
|
|
|
#define DEBUG_OUTPUT Serial |
|
|
|
void TemperatureSensor::init() { |
|
pinMode(pin, INPUT); |
|
} |
|
|
|
void TemperatureSensor::preload() { |
|
for(int i=0; i< 10; i++){ |
|
update(); |
|
} |
|
} |
|
|
|
void TemperatureSensor::update() { |
|
if(measurementCounter < 10){ //Measure 10 times before calculating temperature from average |
|
measurementAccumulative += analogRead(pin); |
|
measurementCounter++; |
|
} else { |
|
int sensorValue = measurementAccumulative/measurementCounter; |
|
// voltage = sensorValue*5.0/1024.0 |
|
// r1 = (vdd-vout)*r2/vout |
|
double resistance = ((1.0-sensorValue/1024.0)*refResistance/(sensorValue/1024.0)); // this is our probe resistance. |
|
double lt = log(resistance); |
|
temperature = (1 / (a+b*lt+c*lt*lt*lt)) - 273.15; //Calculate temperature in Kelvin according to Steinhart-Hart equation, then convert to Celcius |
|
if(temperature < -35) temperature = sqrt (-1); // If value is unpossibly low, return NaN |
|
measurementAccumulative = 0; |
|
measurementCounter = 0; |
|
} |
|
} |
|
|
|
float TemperatureSensor::getTemperature() { |
|
return temperature; |
|
}
|
|
|