Temperature.sketch 2.81 KB
Newer Older
João Lino's avatar
João Lino committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
/*
  Temperature.h - Library for measuring temperature with a Temperature.
  Created by João Lino, December 22, 2015.
  Released into the public domain.
*/
#ifndef TEMPERATURE_h
#define TEMPERATURE_h

#include "Arduino.h"

#define DEBUG

#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);
    Temperature(char *name,
    				int OutputPin_SensorPower, 
					int InputPin_TemperatureReading, 
					int TimeBetweenReadings = 100);

		void measure(boolean ln);
		void measure1(boolean ln, boolean rline);
		void safeHardwarePowerOff();
		
		float getCurrentTemperature();

		float getMeasuredTemperatureDeviation();
		float setMeasuredTemperatureDeviation( float measuredTemperatureDeviation);

		float setSampleDeviation( float sampleDeviation);
  
	private:
		char		*_name;
		int 						_OutputPin_SensorPower; 
		int 						_OutputPin_ThirdLinePower;
		int 						_InputPin_TemperatureReading;
		int 						_InputPin_ThirdLineReading;
		int 						_TimeBetweenReadings;
		float 					_ADCVmax;
		float						_Vs;
		float 					_R1;
		float 					_R2;
		float __m;
		float __b;
		
		float           _temperatureAverage;
		float           _measuredTemperature;
		float			_measuredTemperatureDeviation;
		float			_sampleDeviation;
		unsigned long   _lastTemperatureRead;
		int           _VoutAnalogSample;
		int           _VoutRAnalogSample;
		float           _VoutPreviousAnalogSample;
		int             _temperatureMeasurementsMarker;
		int             _rTemperatureMeasurementsMarker;
		int             _rLineMeasurementsMarker;
		float           _temperatureMeasurements[TEMPERATURE_AVERAGE_VALUE_I] = {TEMPERATURE_AVERATE_INIT_VALUES};
		int           _rTemperatureMeasurements[TEMPERATURE_AVERAGE_VALUE_I] = {TEMPERATURE_AVERATE_INIT_VALUES_I};
		int           _rLineMeasurements[TEMPERATURE_AVERAGE_VALUE_I] = {TEMPERATURE_AVERATE_INIT_VALUES_I};

		float GetMedian(int array[]);
};

#endif