summaryrefslogtreecommitdiff
path: root/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TemperatureCalculator.c
diff options
context:
space:
mode:
Diffstat (limited to 'FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TemperatureCalculator.c')
-rw-r--r--FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TemperatureCalculator.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TemperatureCalculator.c b/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TemperatureCalculator.c
new file mode 100644
index 000000000..04cec59d4
--- /dev/null
+++ b/FreeRTOS-Plus/Test/CMock/examples/temp_sensor/src/TemperatureCalculator.c
@@ -0,0 +1,27 @@
+#include "Types.h"
+#include "TemperatureCalculator.h"
+#include <math.h>
+
+#ifndef logl
+#define logl log
+#endif
+
+float TemperatureCalculator_Calculate(uint16 millivolts)
+{
+ const double supply_voltage = 3.0;
+ const double series_resistance = 5000;
+ const double coefficient_A = 316589.698;
+ const double coefficient_B = -0.1382009;
+ double sensor_voltage = ((double)millivolts / 1000);
+ double resistance;
+
+ if (millivolts == 0)
+ {
+ return -INFINITY;
+ }
+
+ // Series resistor is 5k Ohms; Reference voltage is 3.0V
+ // R(t) = A * e^(B*t); R is resistance of thermisor; t is temperature in C
+ resistance = ((supply_voltage * series_resistance) / sensor_voltage) - series_resistance;
+ return (float)(logl(resistance / coefficient_A) / coefficient_B);
+}