Управление 4 мя сервоприводами

olegeglit
Offline
Зарегистрирован: 16.09.2021

Добрый день, есть скетч для джойстиков PS2, для управления 4 мя сервоприводами, при управлении двумя севами, проблем нет, как только нужно управлять 4 мя, возникают проблемы, де работает как и положено только на одном джойстике первая серва, а на втором третья, в мониторе порта управление отслеживается идеально. Питание на сервы подавать пробовал отдельно, всё тоже самое. Кто может подсказать по этой проблеме?

// include libraries
#include <PS2X_lib.h>
#include <Servo.h> 

Servo Servo1;        
Servo Servo2;
Servo Servo3;
Servo Servo4;

PS2X ps2x; 

int error = 0; 
byte type = 0;
byte vibrate = 0;

int a,b,c,d;



void setup(){

// Start serial communication
 Serial.begin(57600);
 error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error


 Servo1.attach(1);
 Servo2.attach(2);
 Servo3.attach(3);
 Servo4.attach(4);
 
}

// Main loop
void loop(){

   a=Servo1.read(); 
   b=Servo2.read();
   c=Servo3.read();
   d=Servo4.read();
   
 if(error == 1) //skip loop if no controller found
  return; 
  
 else { //DualShock Controller
  
    ps2x.read_gamepad(false, vibrate); 
     
 //Cradle Right
   if(255-ps2x.Analog(PSS_RX) < 120){           
   Serial.println("C Right");              
   Serial.println(ps2x.Analog(PSS_RX));         
   a=a-1;                                       
   Servo1.write(a);                            

   //Cradle Left
   }
   if(255-ps2x.Analog(PSS_RX) > 130){
   Serial.println("C Left");
   Serial.println(ps2x.Analog(PSS_RX));
   a=a+1;
   Servo1.write(a);   
   }

    //Cradle Up
   if(255-ps2x.Analog(PSS_RY) < 120){
   Serial.println("C Up");
   Serial.println(ps2x.Analog(PSS_RY));
   b=b+1;
   Servo2.write(b);

   //Cradle Down
   }
   if(255-ps2x.Analog(PSS_RY) > 130){
   Serial.println("C Down");
   Serial.println(ps2x.Analog(PSS_RY));
   b=b-1;
   Servo2.write(b);   
   }
   
//Cradle Right
   if(255-ps2x.Analog(PSS_LX) < 120){           
   Serial.println("D Right");              
   Serial.println(ps2x.Analog(PSS_LX));         
   c=c-1;                                       
   Servo3.write(c);                            

   //Cradle Left
   }
   if(255-ps2x.Analog(PSS_LX) > 130){
   Serial.println("D Left");
   Serial.println(ps2x.Analog(PSS_LX));
   c=c+1;
   Servo3.write(c);   
   }

    //Cradle Up
   if(255-ps2x.Analog(PSS_LY) < 120){
   Serial.println("D Up");
   Serial.println(ps2x.Analog(PSS_LY));
   d=d+1;
   Servo4.write(d);

   //Cradle Down
   }
   if(255-ps2x.Analog(PSS_LY) > 130){
   Serial.println("D Down");
   Serial.println(ps2x.Analog(PSS_LY));
   d=d-1;
   Servo4.write(d);   
   }

 delay(50);
 }    
}

 

b707
Offline
Зарегистрирован: 26.05.2017

ардуино какая?

olegeglit
Offline
Зарегистрирован: 16.09.2021

NANO V3, пробовал и UNO

b707
Offline
Зарегистрирован: 26.05.2017

У нано пины 0 и 1 заняты Сериалом, а вы туда сервы пихаете