Fabien Lepoutre
/
PID_2
Diff: main.cpp
- Revision:
- 0:e837a6fef44b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Feb 27 16:22:19 2012 +0000 @@ -0,0 +1,55 @@ +#include "mbed.h" + +DigitalOut myled(LED1); +AnalogIn entree(p20); +AnalogOut sortie(p18); + +int main() { + float integral =0; + float previous_error =0; + float error =0; + float prev_sortie =0; + float Kp = 2.72, Ki=2.61, Kd=0; + int interval=2; + float derivative = 0; + float sortie_ns; + myled = 0; +/* printf("Entrer les parametres Kp : \r\n"); + scanf("%f", &Kp); + printf("Ki : \r\n"); + scanf("%f", &Ki); + printf("Kd: \r\n"); + scanf("%f", &Kd); + printf("Periode d'echantillonnage (en ms) :\r\n"); + scanf("%d", &interval);*/ + printf("Debut du programme avec Ki = %f et Kp = %f \n\r", Ki, Kp); + float ana_test = entree.read()*3.3; + printf("p20 = %f \n\r", ana_test); + int i=0; + while(1){ + // printf("In : \r\n"); + // scanf("%f", &error); + /* while(i<20){ + myled = 1; + error = error + entree.read(); + i++; + } + i=0; + myled=0; + error = error/20.0;*/ + error = entree.read(); + + integral = integral + (previous_error*interval); + derivative = (error - previous_error)/interval; + sortie_ns = prev_sortie + (Kp*error)-(Ki*previous_error)+(Kd*derivative); + if(sortie_ns >1) sortie_ns =1; + if(sortie_ns<0) sortie_ns=0; + sortie = sortie_ns; + prev_sortie = sortie_ns;; + previous_error = error; + wait_ms(interval); + } + + + +}