Advertisement
orneto

fl-bmw

May 14th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.80 KB | None | 0 0
  1. float Kp=0,Ki=0,Kd=0;
  2. float error=0, P=0, I=0, D=0, PID_value=0;
  3. float previous_error=0, previous_I=0;
  4. int sensor[5]={0, 0, 0, 0, 0};
  5. int initial_motor_speed=100;
  6.  
  7. void read_sensor_values(void);
  8. void calculate_pid(void);
  9. void motor_control(void);
  10.  
  11. void setup()
  12. {
  13.  pinMode(9,OUTPUT); //PWM Pin 1
  14.  pinMode(10,OUTPUT); //PWM Pin 2
  15.  pinMode(4,OUTPUT); //Left Motor Pin 1
  16.  pinMode(5,OUTPUT); //Left Motor Pin 2
  17.  pinMode(6,OUTPUT); //Right Motor Pin 1
  18.  pinMode(7,OUTPUT);  //Right Motor Pin 2
  19.  Serial.begin(9600); //Enable Serial Communications
  20. }
  21.  
  22. void loop()
  23. {
  24.     read_sensor_values();
  25.     calculate_pid();
  26.     motor_control();
  27. }
  28.  
  29. void read_sensor_values()
  30. {
  31.   sensor[0]=digitalRead(A0);
  32.   sensor[1]=digitalRead(A1);
  33.   sensor[2]=digitalRead(A2);
  34.   sensor[3]=digitalRead(A3);
  35.   sensor[4]=digitalRead(A4);
  36.  
  37.   if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==1))
  38.   error=4;
  39.   else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==1)&&(sensor[4]==1))
  40.   error=3;
  41.   else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==1)&&(sensor[4]==0))
  42.   error=2;
  43.   else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[4]==1)&&(sensor[4]==0))
  44.   error=1;
  45.   else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==1)&&(sensor[4]==0)&&(sensor[4]==0))
  46.   error=0;
  47.   else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==1)&&(sensor[4]==0)&&(sensor[4]==0))
  48.   error=-1;
  49.   else if((sensor[0]==0)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0))
  50.   error=-2;
  51.   else if((sensor[0]==1)&&(sensor[1]==1)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0))
  52.   error=-3;
  53.   else if((sensor[0]==1)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0))
  54.   error=-4;
  55.   else if((sensor[0]==0)&&(sensor[1]==0)&&(sensor[2]==0)&&(sensor[4]==0)&&(sensor[4]==0))
  56.     if(error==-4) error=-5;
  57.     else error=5;
  58.  
  59. }
  60.  
  61. void calculate_pid()
  62. {
  63.     P = error;
  64.     I = I + previous_I;
  65.     D = error-previous_error;
  66.    
  67.     PID_value = (Kp*P) + (Ki*I) + (Kd*D);
  68.    
  69.     previous_I=I;
  70.     previous_error=error;
  71. }
  72.  
  73. void motor_control()
  74. {
  75.     // Calculating the effective motor speed:
  76.     int left_motor_speed = initial_motor_speed-PID_value;
  77.     int right_motor_speed = initial_motor_speed+PID_value;
  78.    
  79.     // The motor speed should not exceed the max PWM value
  80.     constrain(left_motor_speed,0,255);
  81.     constrain(right_motor_speed,0,255);
  82.  
  83.  analogWrite(9,initial_motor_speed-PID_value);   //Left Motor Speed
  84.     analogWrite(10,initial_motor_speed+PID_value);  //Right Motor Speed
  85.     //following lines of code are to make the bot move forward
  86.     /*The pin numbers and high, low values might be different
  87.     depending on your connections */
  88.     digitalWrite(4,HIGH);
  89.     digitalWrite(5,LOW);
  90.     digitalWrite(6,LOW);
  91.     digitalWrite(7,HIGH);
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement