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.
Dependencies: mbed DRV88255 TextLCD Ping mbed-rtos
TemperatureController.cpp
00001 #include "TemperatureController.h" 00002 00003 static AnalogIn temperature_sensor(p20); 00004 static DigitalOut alarmled(LED1); 00005 00006 float TemperatureController::getValue() { 00007 return this->temperature; 00008 } 00009 00010 std::string TemperatureController::getName() { 00011 return "TemperatureController"; 00012 } 00013 00014 void TemperatureController::update() { 00015 this->temperature = readSensor(); 00016 } 00017 00018 // Function reads sensor values and averages NUM_MEASUREMENTS sensor values, as defined in settings.h 00019 float TemperatureController::readSensor() { 00020 float analogin_value = 0; 00021 float temperature = 0; 00022 00023 // Read 0-1.0 value 00024 for(int i = 0; i < NUM_MEASUREMENTS; i++) { 00025 analogin_value += temperature_sensor.read(); 00026 Thread::wait(MEASUREMENT_DELAY); 00027 } 00028 00029 // Average N sensor values 00030 analogin_value /= (float) NUM_MEASUREMENTS; 00031 00032 temperature = analoginToCelsius(analogin_value); 00033 00034 return temperature; 00035 } 00036 00037 // Function converts average sensor value to ppt 00038 float TemperatureController::analoginToCelsius(float analogin_value) { 00039 float voltage = 0; 00040 float offset = 0; 00041 float rt = 0; 00042 float logrt = 0; 00043 float temperature = 0; 00044 00045 // Convert average sensor value to value with range 0-5.0v 00046 voltage = analogin_value * 3.3f * (5.0f/3.0f); 00047 00048 00049 offset = getOffset(voltage); 00050 voltage += offset; 00051 00052 // Calcuate R_T 00053 rt = (15000.0f * voltage) / (4.8f - voltage); 00054 00055 logrt = log(rt); 00056 temperature = 1.0 / (0.00102119 + (0.000222468 * logrt) + (0.000000133342 * logrt*logrt*logrt)); 00057 00058 temperature = temperature - 273.15; 00059 00060 return temperature; 00061 } 00062 00063 float TemperatureController::getOffset(float voltage) { 00064 float denominator_voltage, numerator_voltage, ratio, interpolation; 00065 00066 float voltage_table[15] = {1.43, 1.55, 1.53, 1.56, 1.62, 1.65, 1.67, 1.73, 1.75, 1.80, 1.82, 1.88, 1.93, 1.98, 2.00}; 00067 float offset_table[15] = {0.33, 0.33, 0.40, 0.40, 0.39, 0.42, 0.43, 0.41, 0.45, 0.50, 0.54, 0.53, 0.52, 0.53, 0.56}; 00068 00069 for(int i = 0; i < 14; i++) { 00070 if(voltage_table[i] <= voltage && voltage_table[i+1] >= voltage) { 00071 denominator_voltage = voltage_table[i+1] - voltage_table[i]; 00072 numerator_voltage = voltage - voltage_table[i]; 00073 00074 if(denominator_voltage != 0) { 00075 ratio = numerator_voltage / denominator_voltage; 00076 00077 interpolation = ((offset_table[i+1] - offset_table[i]) * ratio) + offset_table[i]; 00078 00079 return interpolation; 00080 } else { 00081 return offset_table[i]; 00082 } 00083 } 00084 } 00085 00086 if(voltage_table[14] < voltage) { 00087 return offset_table[14]; 00088 } else { 00089 return offset_table[0]; 00090 } 00091 } 00092 00093 void TemperatureController::setLed(bool value){ 00094 if (value) alarmled = 1; 00095 if (!value) alarmled = 0; 00096 } 00097
Generated on Tue Jul 12 2022 18:59:29 by
1.7.2