phillip_bourdon234

ShotDeliverSystem_Car

Jun 10th, 2020 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.92 KB | None | 0 0
  1. // A demonstration of this project can be found here: https://bit.ly/2Ynx09x
  2.  
  3. /*
  4.     Parts used to make the car:
  5.     [4] 6v DC motors
  6.     [4] wheels to attach to the motors
  7.     [1] servo
  8.     [1] vans shoe box
  9.     [1] 9v battery
  10.     [16] AA batteries
  11.     [3] power switches
  12.     [2] L298N motor drivers
  13.     [1] Arduino Mega
  14.         some silicon wrap
  15.         some electrical tape   
  16. */
  17.  
  18. #include <Servo.h>
  19. #include <nRF24L01.h>
  20. #include <printf.h>
  21. #include <RF24.h>
  22. #include <RF24_config.h>
  23. #include <SPI.h>
  24.  
  25. RF24 radio(7, 8);
  26. Servo robotArm;
  27. const byte address[6] = "111111";
  28. int States[3]; // States[0] = X_JOY
  29.                // States[1] = Y_JOY
  30.                // States[2] = Button
  31.  
  32. // rear motors
  33. int enableMotor1 = 10;
  34. int enableMotor2 = 9;
  35. int rotate1ClockWise = 22;
  36. int rotate1CounterClockWise = 23;
  37. int rotate2ClockWise = 40;
  38. int rotate2CounterClockWise = 41;
  39.  
  40. // front motors
  41. int enableMotor3 = 11;
  42. int enableMotor4 = 6;
  43. int rotate3ClockWise = 24;
  44. int rotate3CounterClockWise = 25;
  45. int rotate4ClockWise = 42;
  46. int rotate4CounterClockWise = 43;
  47.  
  48.  
  49. bool currentArmState = false;
  50. bool buttonIsPressed = false;
  51.  
  52. void setup()
  53. {
  54.   robotArm.attach(3);
  55.   radio.begin();
  56.   radio.openReadingPipe(0, address);
  57.   radio.setPALevel(RF24_PA_HIGH);
  58.   pinMode(enableMotor1, OUTPUT);
  59.   pinMode(enableMotor2, OUTPUT);
  60.   pinMode(enableMotor3, OUTPUT);
  61.   pinMode(enableMotor4, OUTPUT);
  62.   pinMode(rotate1ClockWise, OUTPUT);
  63.   pinMode(rotate2ClockWise, OUTPUT);
  64.   pinMode(rotate3ClockWise, OUTPUT);
  65.   pinMode(rotate4ClockWise, OUTPUT);
  66.   pinMode(rotate1CounterClockWise, OUTPUT);
  67.   pinMode(rotate2CounterClockWise, OUTPUT);
  68.   pinMode(rotate3CounterClockWise, OUTPUT);
  69.   pinMode(rotate4CounterClockWise, OUTPUT);
  70.   robotArm.write(180);
  71.   turnMotorsOff();
  72. }
  73.  
  74. void loop()
  75. {
  76.   delay(5);  
  77.    
  78.   radio.startListening();
  79.   if ( radio.available()) {
  80.     while (radio.available()) {
  81.       radio.read(&States, sizeof(States));
  82.     }
  83.     if(States[1] <= 490)
  84.     {
  85.       int motorPowerForward = map(States[1], 0, 490, 255, 0);
  86.       int turningValRight = map(States[0], 490  , 1023, 0, 255);
  87.       int turningValLeft = map(States[0], 0, 490, 255, 0);
  88.       if(States[0] > 490) {
  89.         int motorPowerNet = motorPowerForward - turningValRight;
  90.         if(motorPowerNet < 0)
  91.           motorPowerNet = 0;
  92.         analogWrite(enableMotor1, motorPowerNet);
  93.         analogWrite(enableMotor2, motorPowerForward);
  94.         analogWrite(enableMotor3, motorPowerForward);
  95.         analogWrite(enableMotor4, motorPowerNet);
  96.       }
  97.       else {
  98.         int motorPowerNet = motorPowerForward - turningValLeft;
  99.         if(motorPowerNet < 0)
  100.           motorPowerNet = 0;
  101.         analogWrite(enableMotor1, motorPowerForward);
  102.         analogWrite(enableMotor2, motorPowerNet);
  103.         analogWrite(enableMotor3, motorPowerNet);
  104.         analogWrite(enableMotor4, motorPowerForward);
  105.       }
  106.       spinMotors(1,0); // reverse
  107.     }
  108.     else if(States[1] >= 512)
  109.     {
  110.       int motorPowerReverse = map(States[1], 512, 1023, 0, 255);
  111.       int turningValRight = map(States[0], 490  , 1023, 0, 255);
  112.       int turningValLeft = map(States[0], 0, 490, 255, 0);
  113.       if(States[0] > 490) {
  114.         int motorPowerNet = motorPowerReverse - turningValRight;
  115.         if(motorPowerNet < 0)
  116.           motorPowerNet = 0;
  117.         analogWrite(enableMotor1, motorPowerNet);
  118.         analogWrite(enableMotor2, motorPowerReverse);
  119.         analogWrite(enableMotor3, motorPowerReverse);
  120.         analogWrite(enableMotor4, motorPowerNet);
  121.       }
  122.       else {
  123.         int motorPowerNet = motorPowerReverse - turningValLeft;
  124.         if(motorPowerNet < 0)
  125.           motorPowerNet = 0;
  126.         analogWrite(enableMotor1, motorPowerReverse);
  127.         analogWrite(enableMotor2, motorPowerNet);
  128.         analogWrite(enableMotor3, motorPowerNet);
  129.         analogWrite(enableMotor4, motorPowerReverse);
  130.       }
  131.       spinMotors(0,1); // forward
  132.     }
  133.     else
  134.     {
  135.       turnMotorsOff();
  136.     }
  137.   }
  138.  
  139.   if(States[2] == 0)
  140.   {
  141.     buttonIsPressed = true;
  142.   }
  143.   if(States[2] == 1 && buttonIsPressed == true)
  144.   {
  145.     toggleRobotArm();
  146.     buttonIsPressed = false;
  147.   }
  148. }
  149.  
  150. void turnMotorsOff()
  151. {  
  152.   digitalWrite(enableMotor1, LOW);
  153.   digitalWrite(enableMotor2, LOW);
  154.   digitalWrite(enableMotor3, LOW);
  155.   digitalWrite(enableMotor4, LOW);
  156. }
  157.  
  158. void toggleRobotArm()
  159. {
  160.   currentArmState = !currentArmState;
  161.   if(currentArmState == 1)
  162.   {
  163.     robotArm.write(85);
  164.   }
  165.   else
  166.   {
  167.     robotArm.write(180);
  168.   }
  169.  
  170. }
  171.  
  172. void spinMotors(int boolValOne, int boolValTwo)
  173. {
  174.   digitalWrite(rotate1CounterClockWise, boolValOne);
  175.   digitalWrite(rotate1ClockWise, boolValTwo);
  176.   digitalWrite(rotate2CounterClockWise, boolValOne);
  177.   digitalWrite(rotate2ClockWise, boolValTwo);
  178.   digitalWrite(rotate3CounterClockWise, boolValOne);
  179.   digitalWrite(rotate3ClockWise, boolValTwo);
  180.   digitalWrite(rotate4CounterClockWise, boolValOne);
  181.   digitalWrite(rotate4ClockWise, boolValTwo);
  182. }
Add Comment
Please, Sign In to add comment