Advertisement
Guest User

Untitled

a guest
May 28th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #define DW(pin,val) digitalWrite(pin,val)
  2. #define DR(pin) digitalRead(pin)
  3. #define AW(pin,val) analogWrite(pin,val)
  4. #define AR(pin) analogRead(pin)
  5. #define S Serial
  6. #define PR(val) print(val)
  7. #define PRLN(val) println(val)
  8. #define PM(pin,mode) pinMode(pin,mode)
  9.  
  10. #define LMdir 3 //right motor dir pin
  11. #define LMspd 2 //right motor spd pin
  12. #define RMdir 9 //left motor dir pin
  13. #define RMspd 8 //left motor spd pin
  14.  
  15. #define Forward 0
  16. #define Backward 1
  17.  
  18. #define spd 30 //change it
  19. #define kp 6 //change it
  20. #define kd 3 //change it
  21. //kp and kd should be positive i think
  22.  
  23. int linePins[5]={53,51,49,47,45};
  24. int lineVal;
  25.  
  26. int lastError=0;
  27.  
  28. void setup()
  29. {
  30.   S.begin(9600);
  31.   PM(RMdir,1);
  32.   PM(RMspd,1);
  33.   PM(LMdir,1);
  34.   PM(LMspd,1);
  35.   for (int i=0;i<5;i++)
  36.   PM(linePins[i],0);
  37. }
  38.  
  39. void loop()
  40. {
  41.   int error=readLine();
  42.   int add=kp*error+kd*(error-lastError);
  43.   lastError=error;
  44.   int rightSpd=spd-add;
  45.   int leftSpd=spd+add;
  46.   rightSpd=min(255,max(rightSpd,-255));
  47.   leftSpd=min(255,max(leftSpd,-255));
  48.   motors(sign(rightSpd),rightSpd,sign(leftSpd),leftSpd);
  49. }
  50.  
  51. //functions tap
  52.  
  53. int readLine()
  54. {
  55.   lineVal=0;
  56.   int tem;
  57.   for (int i=0;i<5;i++)
  58.   {
  59.     tem=DR(linePins[i]);
  60.     lineVal|=(tem<<(4-i));
  61.   }
  62.   return (lineVal&3)-((lineVal>>3)&3);
  63. }
  64.  
  65. void motors(int d1,int s1,int d2,int s2)
  66. {
  67.   DW(RMdir,d1);
  68.   AW(RMspd,abs(s1));
  69.   DW(LMdir,!d2);
  70.   AW(LMspd,abs(s2));
  71. }
  72.  
  73. int sign(int x)
  74. {
  75.   return (x>0? Forward:Backward);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement