Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbed_measuring_temperature
LinearTemp.h
00001 /* Copyright (c) <2012> <P. Patel>, MIT License 00002 * 00003 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 00004 * and associated documentation files (the "Software"), to deal in the Software without restriction, 00005 * including without limitation the rights to use, copy, modify, merge, publish, distribute, 00006 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 00007 * furnished to do so, subject to the following conditions: 00008 * 00009 * The above copyright notice and this permission notice shall be included in all copies or 00010 * substantial portions of the Software. 00011 * 00012 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 00013 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00014 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 00015 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00016 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00017 */ 00018 00019 // --------------------- Median Filtered Linear Temperature Sensor Reader ------------------------ 00020 00021 #ifndef LINEAR_TEMP 00022 #define LINEAR_TEMP 00023 00024 #include "mbed.h" 00025 /** This library is designed to work with devices like the LM335 temperature sensor. There are only 00026 * two requirements for compatibility of a device with this library: 1) It must be a sensor device 00027 * that has an analog voltage output. 2) The physical quantity measured must vary linearly with 00028 * the analog voltage. The LM335 which creates an analog voltage proportional to temperature 00029 * can work very well with this library using the nominal multiplier of 0.0050354 and offset of 00030 * -273.15 or by providing two calibration points to the constuctor to generate a linear response. It 00031 * samples the sensor 9 times and uses the median to minimize the effect of poor ADC readings and sudden 00032 * changes. 00033 * 00034 * Example: 00035 * @code 00036 * LinearTemp mysensor(p20, 0.0050354, -273.15); // Setup a LM335 temp sensor on pin 20 00037 * DigitalOut myled(LED1); 00038 * 00039 * int main() { 00040 * while(1) { 00041 * // Light LED if filtered temperature is greater than 45 degrees Celsius 00042 * if (mysensor > 45) myled = 1; 00043 * else myled = 0; 00044 * } 00045 * } 00046 * @endcode 00047 */ 00048 class LinearTemp { 00049 public: 00050 /** Create a calibrated temperature sensor object connected to an Analog input pin 00051 * @param pin Analog input pin to which an LM335 or comparable linear temp sensor is connected 00052 * @param temp1 Temperature (float in degrees C or F) of first calibration point 00053 * @param read1 Mbed ADC reading (unsigned short) of first calibration point 00054 * @param temp2 Temperature (float in degrees C or F) of second calibration point 00055 * @param read2 Mbed ADC reading (unsigned short) of second calibration point 00056 */ 00057 LinearTemp(PinName pin, float temp1, unsigned short read1, float temp2, unsigned short read2); 00058 /** Create a calibrated temperature sensor object connected to an Analog input pin 00059 * @param pin Analog input pin to which an LM335 or comparable linear temp sensor is connected 00060 * @param multiplier Conversion multiplier to go from ADC reading as unsigned short to temperature (change in degrees / change in unsigned short) 00061 * @param offset Conversion offset (positive or negative) 00062 */ 00063 LinearTemp(PinName pin, float multiplier, float offset); 00064 /** Returns a new median-filtered, converted reading from the sensor 00065 * @returns New temperature (float) in degrees C or F as designated by the calibration points 00066 */ 00067 float readTemp(); 00068 /** Return the last calculated and stored temperature 00069 * @returns Last stored temperature (float) in degrees C or F as designated by the calibration points 00070 */ 00071 float getTemp(); 00072 #ifdef MBED_OPERATORS 00073 /** An operator shorthand for readTemp() to calculate filtered temperature 00074 */ 00075 operator float() { 00076 return readTemp(); 00077 } 00078 #endif 00079 private: 00080 AnalogIn _pin; 00081 unsigned short _tempArr[9]; 00082 float _temp; 00083 float _multiplier; 00084 float _offset; 00085 }; 00086 #endif
Generated on Fri Jul 22 2022 06:31:55 by
1.7.2