Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2014
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.07 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. gcc -x c - <<EOF
  4. #include <stdio.h>
  5. #include <stdint.h>
  6. #define return \
  7.     printf("x=%i, p=%i, i=%f, d=%f\n", measured, error, *integral, derivate); \
  8.     return
  9.  
  10. float kI = 0.1, kD = 0.1, kP = 0.1;
  11. float PID_INTERVAL = 1;
  12. uint8_t MOTOR_MAX_SPEED = 100;
  13. uint8_t MOTOR_MIN_SPEED = 0;
  14. uint8_t pid_compute(int measured, int setpoint, uint16_t *prev_error, float *integral)
  15. {
  16.     int16_t error = setpoint - measured;
  17.     uint8_t output;
  18.     float derivate;
  19.  
  20.     *integral = *integral + (error * kI);
  21.     derivate = (error - *prev_error) / (float)PID_INTERVAL;
  22.     output = (kP * error) + (kI * (*integral)) + (kD * derivate);
  23.     *prev_error = error;
  24.  
  25.     if(output > MOTOR_MAX_SPEED) output = MOTOR_MAX_SPEED;
  26.     if(output < MOTOR_MIN_SPEED) output = MOTOR_MIN_SPEED;
  27.  
  28.     return output;
  29. }
  30. #undef return
  31. int main() {
  32.     uint16_t i;
  33.     float integral = 0;
  34.     uint16_t x = 0, e = 0;
  35.     for(i=0;i<50;i++) x += pid_compute(x, 10, &e, &integral);
  36.     for(i=0;i<50;i++) x += pid_compute(x,  0, &e, &integral);
  37.     return 0;
  38. }
  39. EOF
  40.  
  41. ./a.out
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement