Advertisement
Semior001

xbox

Oct 20th, 2016
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.06 KB | None | 0 0
  1. #include "Servo.h"
  2. #include <XBOXRECV.h>
  3. #include <math.h>
  4. #include <arduino.h>
  5. #ifdef dobogusinclude
  6.     #include <spi4teensy3.h>
  7.     #include <SPI.h>
  8. #endif
  9.  
  10. Servo servoBridge;
  11. // Servo blade;
  12. USB Usb;
  13. XBOXRECV Xbox(&Usb);
  14.  
  15. // Перечисление пинов
  16.  
  17. // Пины для колёс
  18. const int motorPin = 3;
  19. const int reversePin = 4;
  20. const int motorPin1 = 5;
  21. const int reversePin1 = 6;
  22.  
  23. // Пин серво мотора, держащего мост
  24. const int servoBridge_pin = 7;
  25.  
  26. // Пин серво мотора-лопатки
  27. const int bladePin = 12;
  28.  
  29. // Пины моторов, которые крутят конвеер
  30. const int conveerReversePin = 9;
  31. const int conveerMotorPin = 8;
  32.  
  33. enum StickStay{
  34.     POS,
  35.     NON,
  36.     NEG
  37. };
  38.  
  39. StickStay y;
  40. StickStay x;
  41.  
  42. // true - нажата, false - не нажата
  43. bool is_y;
  44. bool is_x;
  45. bool is_b;
  46. bool is_a;
  47.  
  48. // Отвечает за состояние моста
  49. bool bridgeMode;
  50. // Отвечает за состояние лопатки
  51. bool bladeMode;
  52.  
  53. void setup() {
  54.     // Инициализация моторов
  55.     pinMode(motorPin, OUTPUT);
  56.     pinMode(reversePin, OUTPUT);
  57.  
  58.     pinMode(motorPin1, OUTPUT);
  59.     pinMode(reversePin1, OUTPUT);
  60.  
  61.     pinMode(conveerMotorPin, OUTPUT);
  62.     pinMode(conveerReversePin, OUTPUT);
  63.  
  64.     // Остановка моторов
  65.     motor_stop(motorPin, reversePin);
  66.     motor_stop(motorPin1, reversePin1);
  67.     motor_stop(conveerMotorPin, conveerReversePin);
  68.     motor_stop(bladeMotorPin, bladeReversePin);
  69.  
  70.     // Инициализация сервомотора
  71.     servoBridge.attach(servoBridge_pin);
  72.     // blade.attach(bladePin);
  73.  
  74.     // Инициализация моста
  75.     bridgeMode = false;
  76.     servoBridge.write(40);
  77.  
  78.     // Подключение серийного COM-порта для отладки скетча
  79.     Serial.begin(115200);
  80.  
  81.     // Проверка на подключение библиотеки
  82.     if (Usb.Init() == -1) {
  83.         Serial.print(F("\r\nOSC did not start"));
  84.         while (1);
  85.     }
  86.     Serial.print(F("\r\nXbox Wireless Receiver Library Started"));
  87. }
  88.  
  89. void motors(){
  90.     if(y == POS){
  91.         motor_forward(motorPin, reversePin, 250);
  92.         motor_forward(motorPin1, reversePin1, 250);
  93.     }else if(y == NEG){
  94.         motor_back(motorPin, reversePin, 250);
  95.         motor_back(motorPin1, reversePin1, 250);
  96.     }
  97.  
  98.     if(x == POS){
  99.         motor_forward(motorPin, reversePin, 250);
  100.         motor_back(motorPin1, reversePin1, 250);
  101.     }else if(x == NEG){
  102.         motor_back(motorPin, reversePin, 250);
  103.         motor_forward(motorPin1, reversePin1, 250);
  104.     }
  105.  
  106.     if(y == NON && x == NON){
  107.         motor_stop(motorPin, reversePin);
  108.         motor_stop(motorPin1, reversePin1);
  109.     }
  110. }
  111.  
  112. void buttons(){
  113.     if(is_x){
  114.       if(!bridgeMode){
  115.         for(int i = 40; i <= 110; i+=10){
  116.             servoBridge.write(i);
  117.             delay(200);
  118.         }
  119.         bridgeMode = true;
  120.       }else{
  121.         servoBridge.write(40);
  122.         bridgeMode = false;
  123.       }
  124.     }
  125.  
  126.     if(is_y){
  127.         motor_forward(conveerMotorPin, conveerReversePin, 150);
  128.     }
  129.  
  130.     if(!is_y){
  131.         motor_stop(conveerMotorPin, conveerReversePin);
  132.     }
  133.  
  134.     if(is_b){
  135.  
  136.     }
  137.  
  138.     if(is_a){
  139.  
  140.     }
  141.  
  142.     if(!is_a && !is_b){
  143.  
  144.     }
  145. }
  146.  
  147. void loop() {
  148.   Usb.Task();
  149.   if(Xbox.XboxReceiverConnected){
  150.  
  151.     y = NON;
  152.     x = NON;
  153.     is_x = false;
  154.     is_b = false;
  155.     is_y = false;
  156.     is_a = false;
  157.  
  158.     // Опрос 4-х ячеек памяти host-shield'а
  159.     for(uint8_t i = 0; i < 4; i++){
  160.         if(Xbox.Xbox360Connected[i]){
  161.  
  162.             if(Xbox.getAnalogHat(LeftHatY, i) >=  20000){
  163.                 y = POS;
  164.             }
  165.             if(Xbox.getAnalogHat(LeftHatY, i) <= -20000){
  166.                 y = NEG;
  167.             }
  168.             if(Xbox.getAnalogHat(LeftHatX, i) >=  20000){
  169.                 x = POS;
  170.             }
  171.             if(Xbox.getAnalogHat(LeftHatX, i) <= -20000){
  172.                 x = NEG;
  173.             }
  174.  
  175.             if(Xbox.getButtonClick(X, i)){
  176.                 is_x = true;
  177.                 Serial.println("x presed");
  178.             }
  179.  
  180.             if(Xbox.getButtonPress(B, i)){
  181.                 is_b = true;
  182.                 Serial.println("B pressed");
  183.             }
  184.  
  185.             if(Xbox.getButtonPress(Y, i)){
  186.                 is_y = true;
  187.                 Serial.println("Y pressed");
  188.             }
  189.  
  190.             if(Xbox.getButtonPress(A, i)){
  191.                 is_a = true;
  192.                 Serial.println("A pressed");
  193.             }
  194.  
  195.         }
  196.     }
  197.  
  198.     motors();
  199.     buttons();
  200.  
  201.   }
  202. }
  203.  
  204.  
  205. // Функции для работы с моторами
  206. void motor_back(int motorPin, int reversePin, int speed){
  207.   digitalWrite(reversePin, HIGH);
  208.   analogWrite(motorPin, 255-speed);
  209. }
  210.  
  211. void motor_forward(int motorPin, int reversePin, int speed){
  212.   digitalWrite(reversePin, LOW);
  213.   analogWrite(motorPin, speed);
  214. }
  215.  
  216. void motor_stop(int motorPin, int reversePin){
  217.   digitalWrite(reversePin, LOW);
  218.   analogWrite(motorPin, 0);
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement