Gamepad PS2+L298n

Тема в разделе "Arduino & Shields", создана пользователем abubakar, 3 сен 2017.

  1. abubakar

    abubakar Нерд

    Здарова народ. В общем пришла машинка с алиэкспресс. Хочу сделать ее с пульта ps2. Вот я не знаю как управлять поворотами. Так то он может ехать вперед назад.
    Код (C++):
    #include <PS2X_lib.h>  //for v1.6
    //#include <Servo.h>
    PS2X ps2x;
    int PS2 = 0;
    //Servo LXservo;


    const int in1 = 2;    // direction pin 1
    const int in2 = 4;    // direction pin 2
    const int in3 = 5;    // direction pin 1
    const int in4 = 6;    // direction pin 2
    const int ena = 3;    // PWM pin to change speed

    int fspeed;           // forward speed

    void setup(){
    // LXservo.attach(9);
      PS2 = ps2x.config_gamepad(13,11,10,12, true, true);   //Настройка выводов: (clock, command, attention, data, true, true)
      pinMode(in1, OUTPUT);      // connection to L298n
      pinMode(in2, OUTPUT);      // connection to L298n
      pinMode(ena, OUTPUT);      // connection to L298n
    /* pinMode(8, OUTPUT);   // Фары
      pinMode(9, OUTPUT);   // Стопаки
      pinMode(5, OUTPUT);   // Стопаки от кнопки
      pinMode(1, OUTPUT);   // Поворот на лево
      pinMode(7, OUTPUT);   // Поворот на право*/

    }



    void loop(){
      ps2x.read_gamepad();
     
      //if(ps2x.ButtonPressed(PSB_CIRCLE)) digitalWrite(8, HIGH);
      //if(ps2x.ButtonPressed(PSB_TRIANGLE)) digitalWrite(8, LOW);
     
     
      //if(ps2x.ButtonPressed(PSB_SQUARE)) digitalWrite(5, HIGH);
      //if(ps2x.ButtonPressed(PSB_CROSS)) digitalWrite(5, LOW);
     
    // if(ps2x.ButtonPressed(PSB_R1)) digitalWrite(7, HIGH);
      // if(ps2x.ButtonPressed(PSB_R2)) digitalWrite(7, LOW);
     
      if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
     

      if (ps2x.Analog(PSS_LY) > 128){
        fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255);
        digitalWrite(in1, LOW);
        digitalWrite(in2, HIGH);
        analogWrite(ena, fspeed);
      //  digitalWrite(9, HIGH);
      }
     
      if (ps2x.Analog(PSS_LY) < 128){
        fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0);
        digitalWrite(in1, HIGH);
        digitalWrite(in2, LOW);
        analogWrite(ena, fspeed);
        //digitalWrite(9, LOW);
      }
     
      (map(ps2x.Analog(PSS_RX), 0, 255, 4.5, 85)); // повороты
     
        if (ps2x.Analog(PSS_RX) < 120){

      }
     
        if (ps2x.Analog(PSS_RX) > 150){

      }
     
          if (ps2x.Analog(PSS_RX) > 120 && ps2x.Analog(PSS_RX) < 150){

      }
     
      delay(50);

    }    









    [​IMG]
     
  2. b707

    b707 Гуру

    Спасибо за инфо. Вопрос-то в чем?
     
  3. abubakar

    abubakar Нерд

    В общем надо изменить его скетч так, чтобы при изменении положения джойстика колеса поворачивались. Ну чтобы ардуино отправляла сигнал на драйвер двигателя, а не на сервопривод. Понял?
     
  4. abubakar

    abubakar Нерд

    Можешь помочь?
     
  5. sslobodyan

    sslobodyan Гик

    Здесь на форуме много толковых и знающих, которые помогают новичкам и интересующимся. Странно, почему они до сих пор не бросились помогать. Понял?
     
  6. abubakar

    abubakar Нерд

    Мдээ...
     
  7. sashasher

    sashasher Нуб

    Народ, помогите. Купил внуку на АЛИ роботанк (манипулятор на танковом шасси). Собрал, а скетч не грузится, ошибка компиляции.
    #include <PS2X_lib.h> //for v1.6
    //#include <Servo.h>
    PS2X ps2x;
    int PS2 = 0;
    //Servo LXservo;


    const int in1 = 2; // direction pin 1
    const int in2 = 4; // direction pin 2
    const int in3 = 5; // direction pin 1
    const int in4 = 6; // direction pin 2
    const int ena = 3; // PWM pin to change speed

    int fspeed; // forward speed

    void setup(){
    // LXservo.attach(9);
    PS2 = ps2x.config_gamepad(13,11,10,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true)
    pinMode(in1, OUTPUT); // connection to L298n
    pinMode(in2, OUTPUT); // connection to L298n
    pinMode(ena, OUTPUT); // connection to L298n
    /* pinMode(8, OUTPUT); // Фары
    pinMode(9, OUTPUT); // Стопаки
    pinMode(5, OUTPUT); // Стопаки от кнопки
    pinMode(1, OUTPUT); // Поворот на лево
    pinMode(7, OUTPUT); // Поворот на право*/
    }



    void loop(){
    ps2x.read_gamepad();

    //if(ps2x.ButtonPressed(PSB_CIRCLE)) digitalWrite(8, HIGH);
    //if(ps2x.ButtonPressed(PSB_TRIANGLE)) digitalWrite(8, LOW);


    //if(ps2x.ButtonPressed(PSB_SQUARE)) digitalWrite(5, HIGH);
    //if(ps2x.ButtonPressed(PSB_CROSS)) digitalWrite(5, LOW);

    // if(ps2x.ButtonPressed(PSB_R1)) digitalWrite(7, HIGH);
    // if(ps2x.ButtonPressed(PSB_R2)) digitalWrite(7, LOW);

    if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);


    if (ps2x.Analog(PSS_LY) > 128){
    fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, fspeed);
    // digitalWrite(9, HIGH);
    }

    if (ps2x.Analog(PSS_LY) < 128){
    fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, fspeed);
    //digitalWrite(9, LOW);
    }

    (map(ps2x.Analog(PSS_RX), 0, 255, 4.5, 85)); // повороты
    if (ps2x.Analog(PSS_RX) < 120){

    }

    if (ps2x.Analog(PSS_RX) > 150){

    }

    if (ps2x.Analog(PSS_RX) > 120 && ps2x.Analog(PSS_RX) < 150){

    }

    delay(50);

    }