Advertisement
MagicWinnie

Untitled

Dec 17th, 2020
815
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. mL  =   brick.motor('M4').setPower;
  2. mR  =   brick.motor('M3').setPower;
  3. eL  =   brick.encoder('E4').read;    
  4. eR  =   brick.encoder('E3').read;
  5. rF_1 = brick.sensor('D1').read;
  6. rF_2 = brick.sensor('D2').read;
  7. rF_3 = brick.sensor('A1').read;
  8. rF_4 = brick.sensor('A2').read;
  9. pi  =   Math.PI;
  10. abs =   Math.abs;
  11. wait = script.wait;
  12. TRIK = false;
  13.  
  14. robot = {
  15.     wheelD: 5.6,
  16.     track: 15.4,
  17.     cpr: 360,
  18.     v: 60
  19. }
  20.  
  21. function cm2cpr(cm)
  22. {
  23.     return (cm / (pi * robot.wheelD)) * robot.cpr;
  24. }
  25.  
  26. function motors(vL, vR)
  27. {
  28.     vL = vL == undefined ? robot.v : vL;
  29.     vR = vR == undefined ? vL : vR;
  30.     mL(vL);
  31.     mR(vR);
  32. }
  33.  
  34. function sign(num) {return num > 0 ? 1 :-1}
  35.  
  36. function straight_without_pid(cm){
  37.     path = (cm / (pi * robot.wheelD)) * robot.cpr;
  38.     path = path + eL();
  39.     if (cm >= 0){
  40.         motors();
  41.         while (eL() < path) wait(10);
  42.     } else {
  43.         motors(-1 * robot.v);
  44.         while (eL() > path) wait(10);
  45.     }
  46.     motors(0, 0);
  47. }
  48.  
  49. function yaw() { return brick.gyroscope().read()[6]; }
  50.  
  51. function turnGyro(angle){
  52.     if (abs(angle) < 200) angle *= 1000;
  53.  
  54.     var sgn = sign(angle - yaw());
  55.     if (abs(angle - yaw()) >= 180000) sgn = -1 * sgn;
  56.  
  57.     if (!TRIK) straight_without_pid(5);
  58.     motors(40 * sgn, -40 * sgn);
  59.     while (abs(angle - yaw()) > 3000) wait(10);
  60.     motors(0, 0);
  61.  
  62.     if (!TRIK) straight_without_pid(-5);
  63. }
  64.  
  65. function moveGyro(g, ang)
  66. {
  67.     ang *= 1000;
  68.     goal = cm2cpr(g);
  69.     goal += eL();
  70.     while (eL() < goal)
  71.     {
  72.         u = (ang - yaw()) / 1000 * 0.7;
  73.         motors(robot.v + u, robot.v - u);
  74.         wait(1);
  75.     }
  76.     motors(0, 0);
  77. }
  78.  
  79. function goFront(gyro0){
  80.     gyro0 *= 1000;
  81.     while (rF_1() > 20)
  82.     {
  83.         u = (gyro0 - yaw()) / 1000 * 0.7;
  84.         motors(robot.v + u, robot.v - u);
  85.         wait(1);
  86.     }
  87.     motors(0, 0);
  88. }
  89.  
  90. function goFront_fromRight(gyro0){
  91.     gyro0 *= 1000;
  92.     while (rF_4() < 75)
  93.     {
  94.         u = (gyro0 - yaw()) / 1000 * 0.7;
  95.         motors(robot.v + u, robot.v - u);
  96.         wait(1);
  97.     }
  98.     motors(0, 0);
  99. }
  100.  
  101. brick.gyroscope().calibrate(2000);
  102. wait(3000);
  103.  
  104. while (1)
  105. {
  106.     goFront(0);
  107.     turnGyro(-90);
  108.     rass1 = rF_4();
  109.    
  110.     gyro0 = -90000;
  111.     path = cm2cpr(70) + eL();
  112.    
  113.     while (eL() < path && rF_4() < 40 && rF_1() >= 20)
  114.     {
  115.         u = (gyro0 - yaw()) / 1000 * 0.7;
  116.         motors(robot.v + u, robot.v - u);
  117.         wait(1);
  118.     }
  119.    
  120.     motors(0, 0);
  121.    
  122.     if ((rF_1() <= 20 || eL() >= path) && abs(rF_4() - rass1) <= 5) break;
  123.        
  124.     goFront_fromRight(-90);
  125.     moveGyro(8, -90);
  126.     turnGyro(0);
  127. }
  128.  
  129. goFront(-90);
  130.  
  131. motors(0, 0);
  132.  
  133. minRass = 600;
  134. flag = 0;
  135.  
  136. angles = [180, 90, 0, -90];
  137.  
  138. for (var i = 0; i < 4; i++)
  139. {
  140.     turnGyro(angles[i]);
  141.     while (1)
  142.     {
  143.         ang = angles[i];
  144.         ang *= 1000;
  145.         goal = cm2cpr(70);
  146.         goal += eL();
  147.         while (1) {
  148.             e = rF_4() - 18;
  149.             p = e * 2.4;
  150.             motors(robot.v + p, robot.v - p);
  151.             if (eL() >= goal) break;
  152.             if (rF_1() <= 22) break;
  153.             if (rF_2() >= 45 && flag == 0) flag = 1;
  154.             if (rF_1() <= 45 && flag == 1) flag = 0;
  155.             wait(1);
  156.         }
  157.         motors(0, 0);
  158.        
  159.         if (flag)
  160.         {
  161.             if (rF_3() < 80 && rF_4() < 80)
  162.             {
  163.                 if (rF_3() + rF_4() < minRass) { minRass = rF_3() + rF_4(); }
  164.             } else {
  165.                 turnGyro(angles[i] - 90);
  166.                 wait(100);
  167.                 if (rF_1() + rF_2() < minRass) { minRass = rF_1() + rF_2(); }
  168.                 wait(100);
  169.                 turnGyro(angles[i]);
  170.             }
  171.         }
  172.         if (rF_1() <= 22) break;
  173.     }
  174. }
  175.  
  176. brick.display().addLabel(Math.floor(minRass), 0, 0);
  177. brick.display().redraw();
  178.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement