On System#Boot do TaskValueSet 3,1,26 // target temp (40°C) TaskValueSet 3,2,5 // Kp TaskValueSet 3,3,2 // Ki TaskValueSet 3,4,1 // Kd // reset PID values let,1,0 let,2,0 let,3,0 let,4,0 let,5,0 //timerSet,1,1 // Start temp readings endon On Rules#Timer=1 do if [TempSensor#Temperature]=0 notify 1 endif let,1,[Params#SetTemp]-[TempSensor#Temperature] // PID_p let,2,(%v2%+(%v1%*5)) // PID_i let,3,(%v1%-%v5%)/5 // PID_d let,4,([Params#Kp]*%v1%+[Params#Ki]*%v2%+[Params#Kd]*%v3%) // PID_value let,5,%v1% // PrevError if %v4%>=0 PWM,12,1,0,10000 // min speed if temp is lower let,7,0 else let,6,-1*%v4% if %v6%>1023 // 1023 is max speed value let,6,1023 endif PWM,12,%v6%,0,10000 // min speed if temp is lower let,7,%v6%*100/1023 endif timerSet,1,5 // recalc in 5s endon