Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.34 KB | None | 0 0
  1. mutex move;
  2. int readingColor;
  3. int startColor;
  4. int Kproportional = 2;
  5. int Kintegral = 0;
  6. int Kderivative = 3;
  7. int integral = 0;
  8. int dt = 100;
  9. int previous_error = 0;
  10. int speed = 5;
  11.  
  12. task moveFwd(){
  13.      while(true){
  14.                  Acquire(move);
  15.                  RotateMotor(OUT_AC, -35, 20);
  16.                  Release(move);
  17.      }
  18. }
  19.  
  20. task checkLine(){
  21.      startColor = SENSOR_1;
  22.      while(true){
  23.                  Acquire(move);
  24.                  readingColor = SENSOR_1;
  25.                  int error =  startColor - readingColor;
  26.                  int proportional = Kproportional * error;
  27.                  integral = integral + error;
  28.                  int derivative = (error - previous_error) / dt;
  29.                  int output = proportional + Kintegral * dt* integral + Kderivative * derivative;
  30.                  previous_error = error;
  31.                  int left = -output;
  32.                  int right = output;
  33.                         OnFwd(OUT_A, -output/2);
  34.                         OnFwd(OUT_C, output/2);
  35.                  Wait(dt);
  36.                  TextOut(0, LCD_LINE1, NumToStr(readingColor), true);
  37.                  TextOut(0, LCD_LINE2," l:" + NumToStr(left) + " r:" + NumToStr(right), true);
  38.                  Release(move);
  39.      }
  40. }
  41.  
  42. task main(){
  43.      SetSensorColorRed(IN_1);
  44.      Precedes(checkLine, moveFwd);
  45.  
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement