Library for my home monitoring classes and serial communication protocol. It monitors temperature and movement on the mbed application board.
Temperature/Temperature.cpp
- Committer:
- groletter
- Date:
- 2013-09-03
- Revision:
- 1:2f5a62eb52ad
- Parent:
- 0:3f846fc933a2
File content as of revision 1:2f5a62eb52ad:
// // 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> // TODO - 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) { 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; }