полностью поддерживаю предыдущего оратора про дуть всегда. если хочется интима, то говнокод
int tPrediction;
int tTarget = TARGET_TEMP;
void heat(int8_t tExt){
static int dtHist[HIST_LEN] = {0};
static int8_t tPrev;
static bool frst = true;
static bool scnd = true;
int dtSumm;
if(frst){
frst = false;
return;
}
if(scnd){
scnd = false;
tPrev = tExt;
}
for(int i = 0; i < (HIST_LEN - 1); i++ ){
dtHist[i] = dtHist[i + 1];
}
dtHist[HIST_LEN - 1] = tExt - tPrev ;
tPrev = tExt;
dtSumm = dtHist[0];
for(int i = 1; i < (HIST_LEN); i++ ){
dtSumm += dtHist[i];
}
tPrediction = tExt;
tPrediction += dtSumm;
{
static int pwmLong = 0;
pwmLong += tTarget - tPrediction;
if(pwmLong < 0)
pwmLong = 0;
if(pwmLong > (100 * 10))
pwmLong = 100 * 10;
setpwm(pwmLong / 10);
}
}
ежели по науке, то это ПД в не каноническом виде.