#ifndef PID_STM32_SPL_H
#define PID_STM32_SPL_H

#include <stdint.h>

typedef struct
{
    float target;
    float actual;
    float output;

    float kp;
    float ki;
    float kd;
    float sample_time;

    float integral_term;
    float previous_error;
    float previous_measurement;

    float integral_limit;
    float output_min;
    float output_max;
    uint8_t conditional_integration;
} PID_t;

void PID_Init(PID_t *pid,
              float kp,
              float ki,
              float kd,
              float sample_time,
              float output_min,
              float output_max,
              float integral_limit);

void PID_Reset(PID_t *pid, float measurement);
float PID_Update(PID_t *pid, float target, float measurement);

#endif
