Конечно, вы можете хранить только один старый образец, а затем проверить разницу как в:
bool isHot(int sample) {
static int oldSample = sample;
return ((sample > 30) || (sample - oldSample > threshold));
}
Это нормально с точки зрения C, но очень плохо с метрологической точки зрения. Вы должны рассмотреть некоторую обусловленность вашего сигнала (в данном случае температуру), чтобы вытащить какие-либо всплески.
Конечно, вы можете добавить букву для формирования сигнала. Для (легкий), например смотреть на Simple Moving насчитайте: https://en.wikipedia.org/wiki/Moving_average
Если вы хотите контролировать скорость вращения вентилятора «правильный путь» вы должны рассмотреть немного узнать о ПИД-регулятора: https://en.wikipedia.org/wiki/PID_controller
Простой дискретный PID: PidController.h :
class PidController
{
public:
PidController();
double sim(double y);
void UpdateParams(double kp, double ki, double kd);
void setSP(double setPoint) { m_setPoint = setPoint; } //set current value of r(t)
private:
double m_setPoint; //current value of r(t)
double m_kp;
double m_ki;
double m_kd;
double m_outPrev;
double m_errPrev[2];
};
PidController.cpp
#include "PidController.h"
PidController::PidController():ControllerObject()
{
m_errPrev[0] = 0;
m_errPrev[1] = 0;
m_outPrev = 0;
}
void PidController::UpdateParams(double kp, double ki, double kd)
{
m_kp = kp;
m_ki = ki;
m_kd = kd;
}
//calculates PID output
//y - sample of y(t)
//returns sample of u(t)
double PidController::sim(double y)
{
double out; //u(t) sample
double e = m_setPoint - y; //error
out = m_outPrev + m_kp * (e - m_errPrev[0] + m_kd * (e - 2 * m_errPrev[0] + m_errPrev[1]) + m_ki * e);
m_outPrev = out; //store previous output
//store previous errors
m_errPrev[1] = m_errPrev[0];
m_errPrev[0] = e;
return out;
}
Что 1 секунда/минута? – CinCout
@HappyCoder: «Этот показатель не имеет решающего значения». "Во всяком случае". –
Это зависит от характера ваших данных. Каков уровень шума? Что такое «быстрый подъем» по отношению к этому. Весьма вероятно, что вы захотите сгладить свои данные, чтобы уменьшить шум, прежде чем вычислять скорость увеличения. И это потребует от вас хранения некоторого количества истории. – Christoph