Advertisement
Guest User

Untitled

a guest
May 25th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1.  
  2. #pragma config(Sensor, in1, LINE1, sensorLineFollower)
  3. #pragma config(Sensor, in2, LINE2, sensorLineFollower)
  4. #pragma config(Sensor, in3, LINE3, sensorLineFollower)
  5. #pragma config(Sensor, in4, COLOR1, sensorLineFollower)
  6. #pragma config(Sensor, in5, COLOR2, sensorLineFollower)
  7. #pragma config(Motor, port2, rightMOTOR, tmotorVex393_MC29, openLoop)
  8. #pragma config(Motor, port3, leftMOTOR, tmotorVex393_MC29, openLoop)
  9. #pragma config(Motor, port4, VER, tmotorVex393_MC29, openLoop, driveLeft)
  10. #pragma config(Motor, port5, HOR, tmotorVex393_MC29, openLoop)
  11. //*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
  12.  
  13. int mySpeed=25;
  14. int IRSensorValues[3]={0,0,0};
  15. int sum=0;
  16. int difference = 0;
  17. int sumR=0;
  18. int sumL=0;
  19. int RL =0;
  20. // PID var
  21. float kp = .8;
  22. float kd=0.15;
  23. float setpoint =0;
  24. float Error=0;
  25. float LastError=0;
  26. float P_PID=0;
  27. float D_PID=0;
  28. float PD=0;
  29. float LoopTime=3;
  30. float PIDError=0;
  31. float PIDDerivative = 0;
  32. float PIDLastError =0;
  33. float PIDDrive = 0;
  34. //float pidIntegral;
  35.  
  36.  
  37. void ReadSensors()
  38.  
  39. {
  40. IRSensorValues[0]=SensorValue[LINE1]*(255.0/4096.0)*63/104;
  41. // wait1Msec(20);
  42. IRSensorValues[1]=SensorValue[LINE2]*(255.0/4096.0);
  43. if(IRSensorValues[1]>110){IRSensorValues[1]=110;}
  44. //wait1Msec(20);
  45. IRSensorValues[2]=SensorValue[LINE3]*(255.0/4096.0)-68;
  46. // wait1Msec(20);
  47. sum=IRSensorValues[0]+IRSensorValues[1];
  48. difference=(IRSensorValues[0]-IRSensorValues[2]);
  49. sumR=IRSensorValues[1]+IRSensorValues[0];
  50. sumL=IRSensorValues[2]+IRSensorValues[1];
  51. RL=sumR-sumL;
  52. }
  53. int pidcontroller()
  54. {
  55. Error=setpoint+RL;
  56. P_PID=Error*kp;
  57. D_PID=((Error-LastError)/(LoopTime/1000))*kd;
  58. PD=P_PID+D_PID;
  59. LastError=Error;
  60. if(PD>mySpeed){PD=mySpeed;}
  61. return PD;
  62. }
  63. /*
  64. while(true)
  65. {
  66. PIDError = RL-setpoint;
  67. //calc derivative
  68. PIDDerivative = PIDError - PIDLastError;
  69. PIDLastError = PIDError;
  70. PIDDrive = ((RL*kp)+(PIDDerivative*kd));
  71.  
  72. }*/
  73.  
  74.  
  75. void MotorControl(int PowerInitial)
  76. {
  77. int Motorpower1=(PowerInitial-(PIDDrive));
  78. int Motorpower2=(PowerInitial+(PIDDrive));
  79.  
  80. if(Motorpower1>127){
  81. Motorpower1 = 127;
  82. }
  83. else if(Motorpower1<-127){
  84. Motorpower1 = -127;
  85. }
  86. if(Motorpower2>127){
  87. Motorpower2 = 127;
  88. }
  89. else if(Motorpower2<-127){
  90. Motorpower2 = -127;
  91. }
  92.  
  93. motor[rightMOTOR]=Motorpower1;
  94. motor[leftMOTOR]=Motorpower2;
  95. }
  96.  
  97. void MotorControlPID(int PowerInitial)
  98. {
  99. int Motorpower1=(PowerInitial+pidcontroller());
  100. int Motorpower2=(PowerInitial-pidcontroller());
  101.  
  102. if(Motorpower1>127){
  103. Motorpower1 = 127;
  104. }
  105. else if(Motorpower1<-127){
  106. Motorpower1 = -127;
  107. }
  108. if(Motorpower2>127){
  109. Motorpower2 = 127;
  110. }
  111. else if(Motorpower2<-127){
  112. Motorpower2 = -127;
  113. }
  114.  
  115. motor[rightMOTOR]=Motorpower1;
  116. motor[leftMOTOR]=Motorpower2;
  117.  
  118. }
  119.  
  120.  
  121. task main()
  122. {
  123.  
  124. while(true)
  125. {
  126. time1[T1]=0;
  127. ReadSensors();
  128. MotorControlPID(mySpeed);
  129. while(time1[T1]<LoopTime){}
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement