Topic: Проблема с сервоприводами
Добрый день.
Почитал форум и часть проблем удалось решить, но часть осталась.
Теперь по порядку. Есть силовой двигатель, мотор движения и сервопривод руля. Если использовать оба решения по отдельности, то все работает как надо, но если вместе, то сервопривод ведет себя странно.
Если крутить слайдер1 то сервопривод начинает крутиться и становиться в разные позиции.
Если крутить слайдер2, то сервопривод поворачивается рывками или запинается и замирает на половине пути.
Вот код:
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__HARDSERIAL
#include <RemoteXY.h>
#include <Servo.h> //используем библиотеку для работы с сервоприводом
// настройки соединения
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600
// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,3,0,0,0,31,0,6,5,0,
2,0,2,1,22,11,2,79,78,0,
79,70,70,0,4,48,76,2,13,59,
2,4,176,2,25,57,14,2 };
// структура определяет все переменные вашего интерфейса управления
struct {
// input variable
uint8_t switch_1; // =1 если переключатель включен и =0 если отключен
int8_t slider_1; // =-100..100 положение слайдера
int8_t slider_2; // =-100..100 положение слайдера
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#define PIN_MOTOR_LEFT_UP 5
#define PIN_MOTOR_LEFT_DN 4
#define PIN_MOTOR_LEFT_SPEED 9
#define PIN_LED 13
#define PIN_MOT 8
Servo servo; //объявляем переменную servo типа Servo
void setup()
{
RemoteXY_Init ();
pinMode (PIN_MOTOR_LEFT_UP, OUTPUT);
pinMode (PIN_MOTOR_LEFT_DN, OUTPUT);
pinMode (PIN_LED, OUTPUT);
servo.attach(PIN_MOT); //привязываем привод к порту PIN_MOT
servo.write(60);
}
void loop()
{
RemoteXY_Handler ();
digitalWrite(PIN_LED, (RemoteXY.switch_1==0)?LOW:HIGH);
servo.write(map(RemoteXY.slider_2,-100,100,140,40));
if (RemoteXY.slider_1>0) {
digitalWrite(PIN_MOTOR_LEFT_UP, HIGH);
digitalWrite(PIN_MOTOR_LEFT_DN, LOW);
analogWrite(PIN_MOTOR_LEFT_SPEED, RemoteXY.slider_1*2.55);
}
else if (RemoteXY.slider_1<0) {
digitalWrite(PIN_MOTOR_LEFT_UP, LOW);
digitalWrite(PIN_MOTOR_LEFT_DN, HIGH);
analogWrite(PIN_MOTOR_LEFT_SPEED, (-RemoteXY.slider_1)*2.55);
}
else {
digitalWrite(PIN_MOTOR_LEFT_UP, LOW);
digitalWrite(PIN_MOTOR_LEFT_DN, LOW);
analogWrite(PIN_MOTOR_LEFT_SPEED, 0);
}
}
Что не так???