Сервопривод непрерывного вращения не меняет направления

Я запрограммировал робота для управления контроллером PS3. Я использую сервоприводы с непрерывным вращением, но, к сожалению, я не могу понять, как заставить их изменить направление. Мой ввод для моих операторов if верен, но по какой-то причине, даже если ввод от контроллера PS3 показывает обратное направление, сервопривод непрерывного вращения все равно вращается вперед.

Вот мой код:

  #include <PS3BT.h>
  #include <usbhub.h>

  // Удовлетворить IDE, которая также должна видеть статус включения в ino.
  #ifdef dobogusinclude
  #include <spi4teensy3.h>
  #endif
  #include <SPI.h>

  #include <Servo.h>


  USB Usb;
  //USB-концентратор Hub1(&Usb); // Некоторые ключи имеют внутри концентратор

  BTD Btd(&Usb); // Вы должны создать экземпляр Bluetooth Dongle следующим образом
  /* You can create the instance of the class in two ways */
  PS3BT PS3(&Btd); // Это просто создаст экземпляр
  //PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // Здесь также будет храниться адрес bluetooth — его можно получить из ключа при запуске скетча

  bool printTemperature, printAngle;

  // идентификация сервоприводов
  Servo LeftServo;
  Servo RightServo;


  void setup() {
    Serial.begin(115200);
    #if !defined(__MIPSEL__)
    while (!Serial); // Дождитесь подключения последовательного порта — используется на платах Leonardo, Teensy и других со встроенным последовательным соединением USB CDC
  #endif
    if (Usb.Init() == -1) {
      Serial.print(F("\r\nOSC did not start"));
      while (1); // остановка
     }
    Serial.print(F("\r\nPS3 Bluetooth Library Started"));

  // Прикрепление выводов к сервоприводам
    LeftServo.attach(2);
    RightServo.attach(3);

  }
  void loop() {
    Usb.Task();

    if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
    if (PS3.getAnalogHat(LeftHatY) < 117){
Serial.print(F("\tLeftHatY: "));
Serial.print(PS3.getAnalogHat(LeftHatY));
  LeftServo.attach(2);
LeftServo.write(180);

}
else if (PS3.getAnalogHat(LeftHatY) > 140) {
     Serial.print(F("\tLeftHatY: "));
Serial.print(PS3.getAnalogHat(LeftHatY));
    LeftServo.attach(2);
  LeftServo.write(0);
  }
else {
LeftServo.detach();
   }
   }
    }

, 👍-1

Обсуждение

Я добавил остальную часть своего кода, я думал опубликовать только соответствующий раздел, но это изменилось., @Brax

забудьте пока о своем коде... напишите простую программу, которая запускает двигатель в одном направлении на две секунды, останавливает двигатель, затем запускает двигатель в противоположном направлении, @jsotola

пожалуйста, отформатируйте код правильно... это беспорядок, который трудно читать, @jsotola

Какие конкретно сервоприводы вы используете?, @RowanP

Можете ли вы добавить схему, показывающую, как вы подключаете и запитываете сервоприводы?, @RowanP

Это связано с вашим другим вопросом вчера? https://arduinoprosto.ru/q/91238/разный-код-необходимый-для-непрерывного-вращения-сервопривод, @RowanP


1 ответ


0

Я новичок в проектах Arduino, но я думаю, что это может сработать, попробуйте изменить некоторые вещи в своем шаге else, вы должны попробовать изменить это

LeftServo.attach(2);
  LeftServo.write(0);

Попробуйте изменить его на это

LeftServo.attach(2);
  LeftServo.write(180*(-1));
// или, LeftServo.write(-180);
/* if you use (180*(-1), the servo might go the opposite direction continuously until 
(PS3.getAnalogHat(LeftHatY) is less than 117 */
,