Сервопривод непрерывного вращения не меняет направления
Я запрограммировал робота для управления контроллером 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();
}
}
}
@Brax, 👍-1
Обсуждение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 */
,
@Joseph Afodu
Смотрите также:
- Для сервопривода с непрерывным вращением требуется другой код
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- Сервопривод не перестанет вращаться
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Печать массива байтов на экране последовательного монитора Arduino IDE
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Arduino IDE Отказано В Разрешении На Загрузку, Ubuntu
Я добавил остальную часть своего кода, я думал опубликовать только соответствующий раздел, но это изменилось., @Brax
забудьте пока о своем коде... напишите простую программу, которая запускает двигатель в одном направлении на две секунды, останавливает двигатель, затем запускает двигатель в противоположном направлении, @jsotola
пожалуйста, отформатируйте код правильно... это беспорядок, который трудно читать, @jsotola
Какие конкретно сервоприводы вы используете?, @RowanP
Можете ли вы добавить схему, показывающую, как вы подключаете и запитываете сервоприводы?, @RowanP
Это связано с вашим другим вопросом вчера? https://arduinoprosto.ru/q/91238/разный-код-необходимый-для-непрерывного-вращения-сервопривод, @RowanP