управление двумя серво (360град) посредством джойстика

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем 3eHuT4uK, 12 янв 2019.

  1. 3eHuT4uK

    3eHuT4uK Нуб

    Доброго времени суток, уважаемые ардуинщики.
    Написал скетч для управления двумя серводвигателями (оба 360 градусов) посредством джойстика, залил на ардуинку(ARDUINO UNO), подключил все по правилам (питание на двигатели отдельно (5В 1А)).
    В итоге при включении питания обе сервы просто вращаются в одну сторону бесконечно.
    Подскажите где что подправить надо...
    Код (C++):
    #include <Servo.h>

    Servo servoLR;
    Servo servoLH;

    const byte PIN_ANALOG_X = 0;
    const byte PIN_ANALOG_Y = 1;

    const int X_THRESHOLD_LOW = 500;
    const int X_THRESHOLD_HIGH = 510;
    const int Y_THRESHOLD_LOW = 505;
    const int Y_THRESHOLD_HIGH = 513;

    int x_position;
    int y_position;
    int x_direction;
    int y_direction;

    void setup() {

    Serial.begin(9600);
    servoLR.attach(11);
    servoLH.attach(12);

    }

    void loop () {

    x_direction = 0;
    y_direction = 0;

    x_position = analogRead(PIN_ANALOG_X);
    y_position = analogRead(PIN_ANALOG_Y);

    if (x_position > X_THRESHOLD_HIGH) {

    x_direction = 1;

    } else if (x_position < X_THRESHOLD_LOW) {

    x_direction = -1;

    }

    if (y_position > Y_THRESHOLD_HIGH) {

    y_direction = 1;

    } else if (y_position < Y_THRESHOLD_LOW) {

    y_direction = -1;

    }

    if (x_direction == -1) {

    if (y_direction == -1) {

    Serial.println("left-down");
    servoLR.write (0);
    servoLH.write (0);
    } else if (y_direction == 0) {

    Serial.println("left");
    servoLR.write (0);

    } else {

    // y_direction == 1

    Serial.println("left-up");
    servoLR.write (0);
    servoLH.write (180);

    }

    } else if (x_direction == 0) {

    if (y_direction == -1) {

    Serial.println("down");
    servoLH.write (0);

    } else if (y_direction == 0) {

    Serial.println("centered");
    servoLR.write (90);
    servoLH.write (180);

    } else {

    // y_direction == 1

    Serial.println("up");
    servoLH.write (180);

    }

    } else {

    // x_direction == 1

    if (y_direction == -1) {

    Serial.println("right-down");
    servoLR.write (180);
    servoLH.write (0);

    } else if (y_direction == 0) {

    Serial.println("right");
    servoLR.write (180);

    } else {

    // y_direction == 1

    Serial.println("right-up");
    servoLR.write (180);
    servoLH.write (0);

    }

    }

    }
    servoLR - серва для вращения влево-вправо
    servoLH - серва для поворота вверх-вниз
     
  2. b707

    b707 Гуру

    а в Сериал что пишет? - ну там "right" или "left-up" и тд?
     
  3. 3eHuT4uK

    3eHuT4uK Нуб

    Джойстик отрабатывает все четко, в сериале все согласно отклонениям джойстика: влево отклонил - пишет left, вниз-вправо - down-right
     
  4. 3eHuT4uK

    3eHuT4uK Нуб

    в чем может таиться проблема ???