#include <PID_v1.h>
#define PIN_INPUT A2
#define PIN_OUTPUT 6
#define Signal 0
double Setpoint, Input, Output;
double Kp=2, Ki=5, Kd=1;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
int WindowSize = 5000;
unsigned int delayTime = 1000;
unsigned long windowStartTime;
unsigned long previousMillis = 0;
void setup() {
windowStartTime = millis();
Setpoint = 100;
// Input = analogRead(PIN_INPUT);
// pinMode(PIN_INPUT, INPUT);
myPID.SetOutputLimits(0, WindowSize);
myPID.SetMode(AUTOMATIC);
Serial.begin(9600);
}
void loop()
{
Input = analogRead(PIN_INPUT);
myPID.Compute();
// turn output pin on/off based on PID output
if(millis() - windowStartTime > WindowSize)
windowStartTime += WindowSize; // shift relay window
if(Output < millis() - windowStartTime)
digitalWrite(PIN_OUTPUT, HIGH);
else
digitalWrite(PIN_OUTPUT, LOW);
// analogWrite(PIN_OUTPUT, Output);
if(millis() - previousMillis > delayTime)
{
previousMillis = millis();
Serial.println(Input, 2);
// the following if statment does not work!!!!!
if(digitalRead(Signal))
digitalWrite(Signal, LOW);
else
digitalWrite(Signal, HIGH);
}
}