Joystick PS2| Как занизить скорость

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

  1. abubakar

    abubakar Нерд

    Собрал машинку на радиоуправлении от пульта ps2. Все работает, но я хочу чтобы скорость была на 50% меньше. Что где исправить? Подскажите.
    #include <PS2X_lib.h> //for v1.6
    #include <Servo.h>
    PS2X ps2x;
    int PS2 = 0;
    Servo VVservo;
    Servo Shoot;



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


    const int in3 = 7; // direction pin 1
    const int in4 = 1; // direction pin 2
    const int enb = 5; // PWM pin to change speed

    int fspeed; // forward speed

    void setup(){

    VVservo.attach(9);
    Shoot.attach(6);

    PS2 = ps2x.config_gamepad(13,11,8,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(in3, OUTPUT); // connection to L298n
    pinMode(in4, OUTPUT); // connection to L298n
    pinMode(enb, OUTPUT); // connection to L298n
    pinMode(0, OUTPUT); // Лазер

    }



    void loop(){
    ps2x.read_gamepad();
    digitalWrite(1, LOW);
    if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
    if (ps2x.Analog(PSS_RY) == 128) analogWrite(enb, 0);
    if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in1, LOW);
    if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in2, LOW);
    if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in3, LOW);
    if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in4, LOW);

    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);

    }
    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);

    }
    if (ps2x.Analog(PSS_RY) > 128){
    fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, fspeed);


    }
    if (ps2x.Analog(PSS_RY) < 128){
    fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, fspeed);

    }
    VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10));



    if(ps2x.ButtonPressed(PSB_R1)) {
    Shoot.write(30);
    }
    if(ps2x.ButtonPressed(PSB_R2)) {
    Shoot.write(180);
    }


    if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH);
    if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW);
    delay(50);

    }
     
  2. Aleksnow

    Aleksnow Нерд

    Код (C++):
    #include <PS2X_lib.h> //for v1.6
    #include <Servo.h>
    PS2X ps2x;
    int PS2 = 0;
    Servo VVservo;
    Servo Shoot;



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


    const int in3 = 7; // direction pin 1
    const int in4 = 1; // direction pin 2
    const int enb = 5; // PWM pin to change speed

    int fspeed; // forward speed

    void setup(){

    VVservo.attach(9);
    Shoot.attach(6);

    PS2 = ps2x.config_gamepad(13,11,8,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(in3, OUTPUT); // connection to L298n
    pinMode(in4, OUTPUT); // connection to L298n
    pinMode(enb, OUTPUT); // connection to L298n
    pinMode(0, OUTPUT); // Лазер

    }



    void loop(){
    ps2x.read_gamepad();
    digitalWrite(1, LOW);
    if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
    if (ps2x.Analog(PSS_RY) == 128) analogWrite(enb, 0);
    if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in1, LOW);
    if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in2, LOW);
    if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in3, LOW);
    if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in4, LOW);

    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);

    }
    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);

    }
    if (ps2x.Analog(PSS_RY) > 128){
    fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, fspeed);


    }
    if (ps2x.Analog(PSS_RY) < 128){
    fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0);
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, fspeed);

    }
    VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10));



    if(ps2x.ButtonPressed(PSB_R1)) {
    Shoot.write(30);
    }
    if(ps2x.ButtonPressed(PSB_R2)) {
    Shoot.write(180);
    }


    if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH);
    if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW);
    delay(50);

    }
    Как кто-то уже говорил вероятность ответа на не форматированный код очень мала)
     
    abubakar нравится это.
  3. Aleksnow

    Aleksnow Нерд

    А скорость чего?) Отклика, или в целом скорость с которой машинка едет? Можно просто переопределить переменную fspeed, т.е. рассчитать 50% и после передавать ее в методы analogWrite. Но это какой то жесткий костыль. Неплохо бы посмотреть саму библиотеку для этого джостика, может там какие процедурки есть для доп. настроек поведения.
     
    Последнее редактирование: 13 апр 2017
    abubakar нравится это.
  4. abubakar

    abubakar Нерд

    Спасибо за ответ. Я хочу занизить скорость самой машинки с которой она едет. "Можно просто переопределить переменную fspeed, т.е. рассчитать 50% и после передавать ее в методы analogWrite." Можешь про это по подробнее. Я не новичок и не супер ардуинщик, золотой средничок)
     
  5. Aleksnow

    Aleksnow Нерд

    Можно попробовать так.
    Код (C++):
    #include <PS2X_lib.h> //for v1.6
    #include <Servo.h>
    PS2X ps2x;
    int PS2 = 0;
    Servo VVservo;
    Servo Shoot;



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


    const int in3 = 7; // direction pin 1
    const int in4 = 1; // direction pin 2
    const int enb = 5; // PWM pin to change speed

    int fspeed; // forward speed

    void setup(){

    VVservo.attach(9);
    Shoot.attach(6);

    PS2 = ps2x.config_gamepad(13,11,8,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(in3, OUTPUT); // connection to L298n
    pinMode(in4, OUTPUT); // connection to L298n
    pinMode(enb, OUTPUT); // connection to L298n
    pinMode(0, OUTPUT); // Лазер

    }



    void loop(){
    ps2x.read_gamepad();
    digitalWrite(1, LOW);
    if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
    if (ps2x.Analog(PSS_RY) == 128) analogWrite(enb, 0);
    if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in1, LOW);
    if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in2, LOW);
    if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in3, LOW);
    if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in4, LOW);

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

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

    }
    if (ps2x.Analog(PSS_RY) > 128){
    fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255);
    fspeed = fspeed*0.5;
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, fspeed);


    }
    if (ps2x.Analog(PSS_RY) < 128){
    fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0);
    fspeed = fspeed*0.5;
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, fspeed);

    }
    VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10));



    if(ps2x.ButtonPressed(PSB_R1)) {
    Shoot.write(30);
    }
    if(ps2x.ButtonPressed(PSB_R2)) {
    Shoot.write(180);
    }


    if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH);
    if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW);
    delay(50);

    }
     
    abubakar нравится это.
  6. abubakar

    abubakar Нерд