Nikita Klimchuk / Mbed 2 deprecated PID_new_temp

Dependencies:   mbed millis

Revision:
1:36155a9a4422
Parent:
0:2b302a1ce68a
Child:
2:fe18ec619746
--- a/PID.cpp	Tue Dec 15 07:52:00 2020 +0000
+++ b/PID.cpp	Sun Dec 27 11:18:36 2020 +0000
@@ -1,50 +1,41 @@
 #include "mbed.h"
 #include "millis.h"
-//#include "SoftwarePWM.h"
-//#include "USBDevice.h"
-#define threshold 0.009 // 1/330
+
+#define threshold 0.009 
 unsigned long lastTime;
 double Input, Output;
-double Setpoint=0.10606060606; //35/330;
+double Setpoint=0.10303030303 ; //34/330;
 double errSum, lastErr;
 double kp, ki, kd;
 int SampleTime = 1000; //1 sec
 
-
 AnalogIn temperature(p20);
 PwmOut fanControl(p21);
-//static BufferedSerial pc(USBTX, USBRX);
 
 Ticker temperatureTicker;
-
 int readTemperatureFlag=0;
 
 void tickerFlagOn()
 {
-    //led2 = !led2;
+
     readTemperatureFlag=1;
 }
 
 void Compute()
 {   
-    printf("PID is functioning\n\r");
+  
    unsigned long now = millis();
    int timeChange = (now - lastTime);
-    //if(timeChange>=SampleTime)
-    //{
-      /*Compute all the working error variables*/
+   if (Setpoint<Input) {
       double error = Setpoint - Input;
       errSum += error;
       double dErr = (error - lastErr);
- 
-      /*Compute PID Output*/
       Output = kp * error + ki * errSum + kd * dErr;
- 
-      /*Remember some variables for next time*/
       lastErr = error;
       lastTime = now;
-    //}
-   //printf("PID loop has ended\n\r");
+      }
+      else { Output=0; errSum=0; lastErr=0;}
+  
 }
  
 void SetTunings(double Kp, double Ki, double Kd)
@@ -71,26 +62,22 @@
     
     float oldTemperature = temperature.read();
     float newTemperature= oldTemperature;
-    temperatureTicker.attach(&tickerFlagOn, 0.2); // the address of the function to be attached (tickerFlagOn) and the interval (0.2 seconds)
+    temperatureTicker.attach(&tickerFlagOn, 0.2); 
     
     while (1)
     {
         newTemperature = temperature.read();
-           //  if ((newTemperature < (oldTemperature-threshold)) || (newTemperature > (oldTemperature+threshold)))
-            // {
-                oldTemperature = newTemperature; // These are for the threshold
-                printf("Temperature= %.1f degrees\n\r", 3.3*oldTemperature*100);
-           //  }
-    //Setpoint=0.0757575757575758;
-    //Setpoint=25/330;
-    Input=oldTemperature;
-    SetTunings(4, 2, 1);
-    Compute();
-    fanControl.period(0.00004f); 
-    if (Setpoint<Input)fanControl.write(-Output); else fanControl.write(0);
-    //fanControl.write(0.50f);
-    printf("inp %f set %f out %f \n \r", Input, Setpoint, Output); 
-    wait(3); 
+                oldTemperature = newTemperature; 
+                printf("Temperature: %.1f\n\r", 3.3*oldTemperature*100);
+  
+        Input=oldTemperature;
+        SetTunings(4, 10, 2); 
+        Compute();
+        fanControl.period(0.00004f); 
+         if (-Output>1) Output=-1;
+        fanControl.write(-Output);
+        printf("Fan speed: %f\n\n\r", -Output);
+        wait(3); 
     }
     
 }
\ No newline at end of file