diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..6a8bc10aebbefffec65195982b7cbf18c870b3ae --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode +build \ No newline at end of file diff --git a/examples/example.ino b/examples/example.ino new file mode 100644 index 0000000000000000000000000000000000000000..575199f8488179ebc0f0cef668f459389ada2c49 --- /dev/null +++ b/examples/example.ino @@ -0,0 +1,44 @@ +#include <pid_controller.h> + +double prop_gain = 0.1; +double int_gain = 0.1; +double diff_gain = 0.01; + +double input_value = 0; +uint8_t step = 0; +uint8_t setpoint = 50; + +PIDController pid(prop_gain, int_gain, diff_gain, 0); + +void setup(){ + Serial.begin(115200); + pid.set_setpoint(setpoint); +} + +void loop(){ + step++; + // if (input_value < 70) + // { + + // pid.set_setpoint(100); + // } + input_value = pid.compute(input_value); + + if(setpoint - input_value < 0.01) + { + Serial.print("Reached setpoint after "); + Serial.print(step); + Serial.print(" steps"); + exit(0); + } + else + { + Serial.print(step); + Serial.print(": "); + Serial.print(input_value); + Serial.print("\n"); + } + + delay(100); + +} \ No newline at end of file diff --git a/pid_controller.cpp b/pid_controller.cpp index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5334491928bbd24c64eccc933dea48cc098bf995 100644 --- a/pid_controller.cpp +++ b/pid_controller.cpp @@ -0,0 +1,25 @@ +#include <pid_controller.h> + +PIDController::PIDController(double Kp, double Ki, double Kd, double setpoint) : Kp(Kp), Ki(Ki), Kd(Kd), setpoint(setpoint) {} + +void PIDController::set_setpoint(double setpoint) +{ + this->setpoint = setpoint; +} + +double PIDController::compute(double input_value) +{ + double error_value = setpoint - input_value; + + out_p = Kp * error_value; // P-Anteil + out_i += Ki * error_value; // I-Anteil + out_d -= Kd * error_value; // D-Anteil + + return out_p + out_i + out_d; +} + +void PIDController::reset() +{ + out_i = 0; + out_d = 0; +} \ No newline at end of file diff --git a/pid_controller.h b/pid_controller.h index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1faf019a62e6bdd3ee0a5d0ebbd9595c6e0ea027 100644 --- a/pid_controller.h +++ b/pid_controller.h @@ -0,0 +1,21 @@ +#ifndef PID_CONTROLLER_H +#define PID_CONTROLLER_H + +#include "Arduino.h" + +class PIDController +{ + public: + PIDController(double Kp, double Ki, double Kd, double setpoint); + double compute(double input_value); + void set_setpoint(double setpoint); + void reset(); + + private: + double Kp, Ki, Kd; + double setpoint; + double out_p, out_i, out_d; + +}; + +#endif \ No newline at end of file