Temperature.h 2.56 KB
Newer Older
João Lino's avatar
João Lino committed
1 2 3 4 5 6 7 8 9 10
/*
  Temperature.h - Library for measuring temperature with a Temperature.
  Created by João Lino, June 24, 2015.
  Released into the public domain.
*/
#ifndef Temperature_h
#define Temperature_h

#include "Arduino.h"

11
//#define DEBUG
João Lino's avatar
João Lino committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25

#define CONSTANT_ADC_STEP_COUNT 	1024.0

#define TEMPERATURE_AVERAGE_VALUE_I				50
#define TEMPERATURE_AVERAGE_VALUE_F 			50.0
//#define TEMPERATURE_AVERATE_INIT_VALUES		0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
#define TEMPERATURE_AVERATE_INIT_VALUES		0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
#define TEMPERATURE_AVERATE_INIT_VALUES_I		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#define TEMPERATURE_SETTING_MAX_VALUE 		120

class Temperature
{
  public:
		// Temperature(Temperature_OUTPUT_PIN, Temperature_INPUT_PIN, Temperature_TIME_BETWEEN_READINGS, Temperature_DEFAULT_ADC_VMAX, Temperature_DEFAULT_VS, Temperature_DEFAULT_R1_RESISTENCE, Temperature_DEFAULT_LINE_RESISTENCE, Temperature_DEFAULT_OPERATION_RESISTENCE);
João Lino's avatar
João Lino committed
26
    Temperature(const char *name,
João Lino's avatar
João Lino committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
    				int OutputPin_SensorPower, 
					int InputPin_TemperatureReading, 
					int TimeBetweenReadings, 
                    float m1, 
                    float m2,
                    float b1,
                    float b2);

		void measure(boolean ln);
		void safeHardwarePowerOff();
		
		float getCurrentTemperature();

		float setPumpStatus( bool pump );
  
	private:
João Lino's avatar
João Lino committed
43 44 45 46
		const char	*_name;
		int 			  _OutputPin_SensorPower; 
		int 			  _InputPin_TemperatureReading;
		int 			  _TimeBetweenReadings;
João Lino's avatar
João Lino committed
47 48 49 50 51
		float 			_m1;
		float 			_m2;
		float 			_b1;
		float 			_b2;
		
João Lino's avatar
João Lino committed
52 53 54 55
		float       _temperatureAverage;
		float       _measuredTemperature;
		float			  _measuredTemperatureDeviation;
		bool			  _pump;
João Lino's avatar
João Lino committed
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
		unsigned long   _lastTemperatureRead;
		int           	_VoutAnalogSample;
		int           	_VoutRAnalogSample;
		float           _VoutPreviousAnalogSample;
		int             _temperatureMeasurementsMarker;
		int             _rTemperatureMeasurementsMarker;
		float           _temperatureMeasurements[TEMPERATURE_AVERAGE_VALUE_I] = {TEMPERATURE_AVERATE_INIT_VALUES};
		int           	_rTemperatureMeasurements[TEMPERATURE_AVERAGE_VALUE_I] = {TEMPERATURE_AVERATE_INIT_VALUES_I};

		float GetMedian(int array[]);
		float GetMedianAverage(int array[], int range);
		float GetMode(float array[]);
};

#endif