版权声明:转载请注明原文地址即可,要是本文对您有些许帮助的话,请您在下方点个赞,谢谢啦ヾ(o◕∀◕)ノヾ https://blog.csdn.net/qq_33583069/article/details/88783564
float Kp = 0.5,Ki = 0.5,Kd = 0.5;
float Pout,Iout,Dout,Output;
float now,lasttime=0,timechange;
float Input,lastinput,Setpoint=127.0;
float error,errorsum=0,Derror;
int settime = 1000;
void setup(){
Serial.begin(9600);
}
void loop(){
now = millis();
timechange=npw-lasttime;
if(timechange>=settime){
Input=(analogRead(0)/4.0);
error=Setpoint-Input;
errorsum=errorsum+error;
Derror=Input-lastinput;
Pout=Kp*error;
Iout=Ki*errorsum;
Dout=Kd*Derror;
if(Iout>255)Iout=255;
if(Iout<0)Iout=0;
Output=Pout+Iout+Dout;
if(Output>255)Output=255;
if(Output<0)Output=0;
lastinput=Input;
lasttime=now;
analogWrite(3,Output);
Serial.print(Setpoint);
Serial.print(" : ");
Serial.print(Input);
Serial.print(" : ");
Serial.println(Output);
}
}