turt2live

VEX Robot

Feb 17th, 2012
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.52 KB | None | 0 0
  1. #pragma config(Sensor, dgtl1,   sonarFront,     sensorSONAR_cm)
  2. #pragma config(Sensor, dgtl3,   sonarBack,      sensorSONAR_cm)
  3. #pragma config(Sensor, dgtl5,   limitSwitchL,   sensorTouch)
  4. #pragma config(Sensor, dgtl6,   limitSwitchR,   sensorTouch)
  5. #pragma config(Motor,  port2,   rightMotor,     tmotorNormal, openLoop, reversed)
  6. #pragma config(Motor,  port3,   arm,            tmotorNormal, openLoop)
  7. #pragma config(Motor,  port4,   leftMotor,      tmotorNormal, openLoop)
  8. #pragma config(Motor,  port5,   claw,           tmotorNormal, openLoop)
  9.  
  10. /*==============================================================
  11. ||                    VEX COMPETITION STUFF                   ||
  12. ==============================================================*/
  13.  
  14. #pragma platform(VEX)                      // REQUIRED
  15. #pragma competitionControl(Competition)    // Don't touch
  16. #pragma autonomousDuration(20)             // 60 = challange, 20 otherwise
  17. #pragma userControlDuration(120)           // Don't touch
  18. #include "Vex_Competition_Includes.c"      // REQUIRED
  19.  
  20. /*==============================================================
  21. ||                       CODE STARTS HERE                     ||
  22. ==============================================================*/
  23.  
  24. // Variables setup
  25. int automode = -1; // Default is Fail Safe
  26. int wasMoving = 0; // 1 = Was moving last tick, 0 otherwise
  27.  
  28. // STOP (forces a stop of all motors)
  29. void fstop(){
  30.     motor[leftMotor] = 0;
  31.     motor[rightMotor] = 0;
  32.     motor[arm] = 0;
  33.     motor[claw] = 0;
  34. }
  35.  
  36. // BRAKE (params: milliseconds, power (will be inverted))
  37. void brake(int msec, int motorValue){
  38.     int tick = 0;
  39.     do{
  40.         motor[leftMotor] = -motorValue;
  41.         motor[rightMotor] = -motorValue;
  42.         float percent = tick/msec;
  43.         motorValue = -(int) percent*motorValue;
  44.         tick ++;
  45.     }while(tick < msec);
  46. }
  47.  
  48. // BEFORE MATCH START
  49. void pre_auton(){
  50.     int limit1 = SensorValue(limitSwitchR);
  51.     int limit2 = SensorValue(limitSwitchL);
  52.     if(limit1 == 1 && limit2 == 0){
  53.         automode = 0;
  54.     }else if(limit1 == 1 && limit2 == 1){
  55.         automode = 1;
  56.     }else if(limit1 == 0 && limit2 == 1){
  57.         automode = 2;
  58.     }else if(limit1 == 0 && limit2 == 0){
  59.         automode = 3;
  60.     }else{
  61.         automode = -1;
  62.     }
  63. }
  64.  
  65. // Simple Driving Functions
  66. void moveForward(int msec){
  67.     int ticks = 0;
  68.     do{
  69.         motor[leftMotor] = 127;
  70.         motor[rightMotor] = 127;
  71.         ticks ++;
  72.     }while(ticks < msec);
  73.     brake(100, 127/4);
  74.     motor[leftMotor] = 0;
  75.     motor[rightMotor] = 0;
  76. }
  77.  
  78. void moveBackward(int msec){
  79.     int ticks = 0;
  80.     do{
  81.         motor[leftMotor] = -127;
  82.         motor[rightMotor] = -127;
  83.         ticks ++;
  84.     }while(ticks < msec);
  85.     motor[leftMotor] = 0;
  86.     motor[rightMotor] = 0;
  87. }
  88.  
  89. void turnLeft(int msec){
  90.     int ticks = 0;
  91.     do{
  92.         motor[leftMotor] = 127;
  93.         motor[rightMotor] = -127;
  94.         ticks ++;
  95.     }while(ticks < msec);
  96.     motor[leftMotor] = 0;
  97.     motor[rightMotor] = 0;
  98. }
  99.  
  100. void turnRight(int msec){
  101.     int ticks = 0;
  102.     do{
  103.         motor[leftMotor] = -127;
  104.         motor[rightMotor] = 127;
  105.         ticks ++;
  106.     }while(ticks < msec);
  107.     motor[leftMotor] = 0;
  108.     motor[rightMotor] = 0;
  109. }
  110.  
  111. // AUTONOMOUS FUNCTIONS
  112. void runRedIso(){ // Isolation, RED
  113.     moveForward(1500);
  114.     turnRight(750);
  115.     moveForward(3000);
  116.     fstop();
  117. }
  118.  
  119. void runRedGroup(){ // Group, RED
  120.     moveForward(500);
  121.     turnLeft(100);
  122.     moveForward(250);
  123.     fstop();
  124. }
  125.  
  126. void runBlueIso(){ // Isolation, BLUE
  127.     moveForward(1500);
  128.     turnLeft(750);
  129.     moveForward(3000);
  130.     fstop();
  131. }
  132.  
  133. void runBlueGroup(){ // Group, BLUE
  134.     moveForward(500);
  135.     turnRight(100);
  136.     moveForward(250);
  137.     fstop();
  138. }
  139.  
  140. void runFailSafe(){ // Unknown automode, failsafe
  141.     int stop = 0;
  142.     do{
  143.         moveForward(100);
  144.         int distance = SensorValue(sonarFront);
  145.         if(distance > 0 && distance < 5){
  146.             stop = 1;
  147.         }
  148.     }while(stop == 0);
  149.     turnLeft(50);  // 3 lines to create a glance-like action (left, right, center)
  150.     turnRight(100);
  151.     turnLeft(50);
  152.     moveForward(500);
  153.     moveBackwards(500);
  154.     turnRight(300);
  155.     fstop();
  156. }
  157.  
  158.  
  159. // AUTONOMOUS
  160. task autonomous(){
  161.     if(automode == 0){
  162.         runRedIso();
  163.     }else if(automode == 1){
  164.         runRedGroup();
  165.     }else if(automode == 2){
  166.         runBlueIso();
  167.     }else if(automode == 3){
  168.         runBlueGroup();
  169.     }else{
  170.         runFailSafe();
  171.     }
  172. }
  173.  
  174. // USER CONTROL
  175. task usercontrol(){
  176.     fstop(); // Cleanup from auto
  177.     while (true){
  178.         // VARIABLES
  179.         int LMotor = vexRT[Ch3];
  180.         int RMotor = vexRT[Ch2];
  181.         int ARMMotor = 0;
  182.         int CLAWMotor = 0;
  183.  
  184.         // JOYSTICK CALIBRATION (115 is the absolute, 127 is hardcode)
  185.         if(LMotor != 127 && LMotor > 115){
  186.             LMotor = 127;
  187.         }else if(LMotor != -127 && LMotor < -115){
  188.             LMotor = -127;
  189.         }
  190.         if(RMotor != 127 && RMotor > 115){
  191.             RMotor = 127;
  192.         }else if(RMotor != -127 && RMotor < -115){
  193.             RMotor = -127;
  194.         }
  195.        
  196.         // LEFT MOTOR CONTROL
  197.         if(LMotor == 127){
  198.             LMotor = 127 - (127/4);
  199.         }else if(LMotor == -127){
  200.             LMotor = 127 - (127/4);
  201.             LMotor = -LMotor; // Flip
  202.         }
  203.  
  204.         // RIGHT MOTOR CONTROL
  205.         if(RMotor == 127){
  206.             RMotor = 127 - (127/4);
  207.         }else if(RMotor == -127){
  208.             RMotor = 127 - (127/4);
  209.             RMotor = -RMotor; // Flip
  210.         }
  211.  
  212.         // MOVEMENT DETECTION
  213.         if(RMotor == 0 && LMotor == 0){
  214.             if(wasMoving == 1){
  215.                 brake(100, (127/4));
  216.             }
  217.             wasMoving = 0;
  218.         }else{
  219.             wasMoving = 1;
  220.         }
  221.  
  222.         // ARM CONTROL
  223.         if(vexRT[Btn5U]){
  224.             ARMMotor = 127/2; // Halved for elastics
  225.         }else if(vexRT[Btn5D]){
  226.             ARMMotor = -(127/2); // Halved for elastics
  227.         }
  228.  
  229.         // CLAW CONTROL
  230.         if(vexRT[Btn6U]){
  231.             CLAWMotor = 127;
  232.         }else if(vexRT[Btn6D]){
  233.             CLAWMotor = -127;
  234.         }
  235.  
  236.         // Assign motor values
  237.         motor[leftMotor] = LMotor;
  238.         motor[rightMotor] = RMotor;
  239.         motor[claw] = CLAWMotor;
  240.         motor[arm] = ARMMotor;
  241.     }
  242. }
Advertisement
Add Comment
Please, Sign In to add comment