Library for my home monitoring classes and serial communication protocol. It monitors temperature and movement on the mbed application board.

Dependents:   FinalProject

Revision:
0:3f846fc933a2
Child:
1:2f5a62eb52ad
diff -r 000000000000 -r 3f846fc933a2 Temperature/Temperature.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Temperature/Temperature.cpp	Sun Sep 01 23:35:18 2013 +0000
@@ -0,0 +1,112 @@
+//
+// This file contains function related to the temperature 
+// control of the home monitoring system
+//
+
+#include "Temperature.h"
+#include "HomeMonUtils.h"
+#include <vector>
+#include <string>
+#include <sstream>
+
+// FIXME - add timestamp to temperature samples
+  
+Temperature::Temperature() {
+	max_temp_limit = 150.0;  // Maximum allowed value
+	min_temp_limit = -150.00; // Minimum allowed value
+	max_samples_limit = 100; // Maximum of 100 samples in buffer
+	period_limit = 0.1;  // No faster than 1/10th of a second
+    min_temp = 80.0; // Farenheit
+    max_temp = 86.0; // Farenheit
+    temp_sample_period = 10.0;  // seconds
+    max_samples = 20;
+    sample_ptr = 0;
+    wrapped_once = false;
+	// WARNING - width is important here, must be 7 characters!
+    temp_samples.resize(max_samples,"0.00000");
+}
+
+bool Temperature::change_max_samples(int num_samples) {
+    // WARNING - setting this dumps all saved data!
+    if (num_samples > 0  && num_samples <= max_samples_limit) {
+        max_samples = num_samples;
+		// WARNING - width is important here, must be 7 characters!
+        temp_samples.resize(max_samples, "0.00000");
+		return true;
+    }
+    else {
+        return false;
+    }
+}
+
+void Temperature::add_sample(double sample) {
+    
+    std::string str_sample;
+    convert_sample(sample, str_sample);
+    if (sample_ptr == max_samples) {
+        wrapped_once = true;
+        sample_ptr = 0;
+        temp_samples[sample_ptr] = str_sample;
+    }
+    else {
+        temp_samples[sample_ptr++] = str_sample;
+    }
+}
+
+bool Temperature::set_period(double period) {
+	// Only 7 digits max allowed in a number so make
+	// sure period fits in that limit.  String sent to
+	// host will be rounded to 7 digits before transmission
+	if (period > period_limit && period < 999999.99) {
+	    temp_sample_period = period;
+		return true;
+	}
+	else {
+		return false;
+	}
+}
+
+bool Temperature::set_min(double min) {
+	if (min > max_temp_limit || min < min_temp_limit || min > max_temp_limit) {
+		return false;
+	}
+	else {
+        min_temp = min;
+		return true;
+	}
+}
+
+bool Temperature::set_max(double max) {
+	if (max > max_temp_limit || max < min_temp_limit || max < min_temp) {
+		return false;
+	}
+	else {
+        max_temp = max;
+		return true;
+	}
+}
+
+double Temperature::get_min(void) {
+    return min_temp;
+}
+
+double Temperature::get_max(void) {
+    return max_temp;
+}
+
+double Temperature:: get_period() {
+	return temp_sample_period;
+}
+
+int Temperature::get_max_samples() {
+	return max_samples;
+}
+
+const std::vector<std::string> &Temperature::get_samples(void) {
+    // FIXME - need to copy out samples in order of oldest
+    // to newest or maybe not if change to contain timestamp
+    // and let the host worry about adding it.  If use multi-map
+    // it would be sorted automatically.  Maybe a better idea.
+    return temp_samples;
+}
+