Танк управляемый джойстиком PS-2

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Ну теперь самое веселое, сделай чтобы ездило как в коде сделанном через жопу))

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Огромное тебе СПАСИБО добрый человек!!! Всё именно так как я о хотел! ТОРМОЗИТ как Жигуль - аШ зад приподымает! 

Вот не пойму в чём дело - провода ставили по приведённой схеме, нумерацию делал по проводам..... поменял на это и всё пошло именно так - КАК НАДО! Ещё раз спасибо!


GMotor motorR(DRIVER2WIRE, 2, 3, HIGH);
GMotor motorL(DRIVER2WIRE, 4, 5, HIGH);

 

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

Ну теперь самое веселое, сделай чтобы ездило как в коде сделанном через жопу))

Нет ты не правильно понял - ая сразу то и не поправил! Вот именно этот скейч написан ОЧЕНЬ грамотно-буквально 10 строк и всё! Через жопу это тот в котором тормоза ковырял! Да же как и куда их прописать не понятно! И писанины там тьма!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Да пожалуйста)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

oboltus-РУ пишет:

jeka_tm пишет:

Ну теперь самое веселое, сделай чтобы ездило как в коде сделанном через жопу))

Нет ты не правильно понял - ая сразу то и не поправил! Вот именно этот скейч написан ОЧЕНЬ грамотно-буквально 10 строк и всё! Через жопу это тот в котором тормоза ковырял! Да же как и куда их прописать не понятно! И писанины там тьма!

Да это не тьма, просто что скрыто в библиотеке не видишь, а тут еще нет вот и все. Добавишь что было в библиотеке драйвера и все встанет на свои места

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Теперь б попробовать с раздельными поворотами переделать этот секйч, или как то уменьшить чувствительность джостика по оси LX.

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Да это не тьма, просто что скрыто в библиотеке не видишь, а тут еще нет вот и все. Добавишь что было в библиотеке драйвера и все встанет на свои места

Ага! Тут с этим то еле разобрались!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Ещё раз спасибо тебе за ОГРОМНУЮ помощь jeka_tm !

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Да пожалуйста, развлекайся

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Угу!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Приветствую! В продолжение темы: На моём шасси будет установлен захват-манипулятор с "клешнёЙ". Будет использовано 6 серв. Есть огромное желание управлять ими с пульта кнопками как на этом видео https://www.youtube.com/watch?v=LEGiW43sKn8&t=106s. Но автор не оставил скейч и проэкт давно заброшен! Я убрал всё лишнее с того что у меня есть - но как мне уменьшить скорость работы серв? 

#include <PS2X_lib.h>  //for v1.6
#include <Servo.h>
PS2X ps2x;
int PS2 = 0; 

Servo Shoot;

void setup(){
  
 Shoot.attach(10);
  PS2 = ps2x.config_gamepad(13,11,8,12, true, true);   //Настройка выводов: (clock, command, attention, data, true, true)
 
}

void loop(){
  ps2x.read_gamepad();
     
  if(ps2x.ButtonPressed(PSB_R1))  {   
 Shoot.write(45);
  
  }
  
    if(ps2x.ButtonPressed(PSB_R2))  {   
  Shoot.write(0);
  
  }
 
 
  delay(50);

}  

Может кто сможет мне помочь в этом деле - буду ОЧЕНЬ благодарен!

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

 if(nJoyL)<-50)

пропущена скобка
 if((nJoyL)<-50)
и попробуй приемник подключить на 5 вольт
olegeglit
Offline
Зарегистрирован: 16.09.2021

Вот управление 4 сервы и два мотора, если нужно, можно еще сервы добавить

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

Servo Servo1;        //Declaring cradle servos, Servo1 is the base
Servo Servo2;
Servo Servo3;
Servo Servo4;

PS2X ps2x; // create PS2 Controller Class

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

int a,b,c,d;


// These are used to set the direction of the bridge driver.
#define ENA 3      //ENA
#define MOTORA_1 A0 //IN3
#define MOTORA_2 A1 //IN4
#define MOTORB_1 A2 //IN1
#define MOTORB_2 A3 //IN2
#define ENB 6      //ENB

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

 // Configure output pins
 pinMode(ENA, OUTPUT);
 pinMode(MOTORA_1, OUTPUT);
 pinMode(MOTORA_2, OUTPUT);
 pinMode(ENB, OUTPUT);
 pinMode(MOTORB_1, OUTPUT);
 pinMode(MOTORB_2, OUTPUT);

 // Disable both motors
 digitalWrite(ENA,0);
 digitalWrite(ENB,0);

 Servo1.attach(9);
 Servo2.attach(2);
 Servo3.attach(5);
 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); // disable vibration of the controller

     // Perform movements based on D-pad buttons
     
     // MOVE FORWARD
     if(ps2x.Button(PSB_PAD_UP)) {
        digitalWrite(MOTORA_1,LOW);
        digitalWrite(MOTORA_2,HIGH);
        digitalWrite(MOTORB_1,HIGH);
        digitalWrite(MOTORB_2,LOW);
        analogWrite(ENB, 1023);
        analogWrite(ENA, 1023);
        Serial.println("Move forward");
      }
      // TURN RIGHT
      if(ps2x.Button(PSB_PAD_RIGHT)){
        digitalWrite(MOTORA_1,HIGH);
        digitalWrite(MOTORA_2,LOW);
        digitalWrite(MOTORB_1,HIGH);
        digitalWrite(MOTORB_2,LOW);
        analogWrite(ENB, 1023);
        analogWrite(ENA, 1023);
        Serial.println("Turn right");
      }
      // TURN LEFT
      if(ps2x.Button(PSB_PAD_LEFT)){
        digitalWrite(MOTORA_1,LOW);
        digitalWrite(MOTORA_2,HIGH);
        digitalWrite(MOTORB_1,LOW);
        digitalWrite(MOTORB_2,HIGH);
        analogWrite(ENB, 1023);
        analogWrite(ENA, 1023);
        Serial.println("Turn left");
      }
      // MOVE BACK
      if(ps2x.Button(PSB_PAD_DOWN)){
        digitalWrite(MOTORA_1,HIGH);
        digitalWrite(MOTORA_2,LOW);
        digitalWrite(MOTORB_1,LOW);
        digitalWrite(MOTORB_2,HIGH);
        analogWrite(ENB, 1023);
        analogWrite(ENA, 1023);         
        Serial.println("Move back");
      }
  
      if (!ps2x.Button(PSB_PAD_DOWN) && !ps2x.Button(PSB_PAD_UP) && !ps2x.Button(PSB_PAD_RIGHT) && !      ps2x.Button(PSB_PAD_LEFT)) {
        analogWrite(ENB, 0);
        analogWrite(ENA, 0);
    }  

 //Cradle Right
   if(255-ps2x.Analog(PSS_RX) < 120){           //Если палка направлена вправо.
   Serial.println("C Right");                   //Мы считываем текущее положение сервопривода (a=Servo1.read())
   Serial.println(ps2x.Analog(PSS_RX));         //И мы уменьшаем "1"
   a=a-1;                                       //Затем мы записываем новую позицию, которая равна a-1.
   Servo1.write(a);                             //Вы можете изменить " 1 " на более высокую, чтобы она быстро поворачивалась                         

   //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 Up
   if(255-ps2x.Analog(PSS_LX) < 120){
   Serial.println("C U");
   Serial.println(ps2x.Analog(PSS_LX));
   c=c+1;
   Servo3.write(c);

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

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

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

 

Sylissimo
Offline
Зарегистрирован: 03.04.2022

Если бы у робота был коготь на конце его руки, который является шестым сервоприводом, как бы вы его закодировали?

Как бы вы закодировали, если бы было 6 сервоприводов? Джойстик PS2 имеет только 4, LX, LY, RX и RY?

Спасибо.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Дофига и больше) Любые кнопки в помощь. В примере к либе они кажется все задействованы.

Sylissimo
Offline
Зарегистрирован: 03.04.2022

Я объединил L1 и R1 с LX и RX для пятого и шестого сервоприводов и объединил !L1 и !R1 с LX и RX в третьем и втором сервоприводах, которые работают. Смотри ниже. Но все же нужна помощь с зажимом. Любые идеи, пожалуйста, помогите? Спасибо.

 //Third Servo moves up and down
   //Cradle Up
   if(!ps2x.Button(PSB_L1)&& 255-ps2x.Analog(PSS_LX) < 120){
   Serial.println("3rd Up");
   Serial.println(ps2x.Analog(PSS_LX));
   c=c+1;
   Servo3.write(c);

   //Cradle Down
   }
   if(!ps2x.Button(PSB_L1)&& 255-ps2x.Analog(PSS_LX) > 130 ){
   Serial.println("3rd Down");
   Serial.println(ps2x.Analog(PSS_LX));
   c=c-1;
   Servo3.write(c);   
   }

    //4th Servo moves up and down
    //Cradle Up   
    if(255-ps2x.Analog(PSS_LY) < 120){

   Serial.println("4th Up");
   Serial.println(ps2x.Analog(PSS_LY));
   d=d-1;
   Servo4.write(d);

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


//5th Servo moves left and right
    //Cradle Right
   if(ps2x.Button(PSB_L1)&& ps2x.Analog(PSS_LX) > 130){           
   Serial.println("5th Right");                  
   Serial.println(ps2x.Analog(PSS_LX));        
   e=e-1;                                       
   Servo5.write(e);                                                  

   //Cradle Left
   }
   if(ps2x.Button(PSB_L1)&& ps2x.Analog(PSS_LX) < 120){
   Serial.println("5th Left");
   Serial.println(ps2x.Button(PSB_L1));
   e=e+1;
   Servo5.write(e);   
   }
 
    //6th clamp Servo moves left and right
    //Cradle Right
   if(ps2x.Button(PSB_R1)&& ps2x.Analog(PSS_RX) > 130){           
   Serial.println("6th Right");                  
   Serial.println(ps2x.Analog(PSS_RX));        
   f=f-1;                                       
   Servo6.write(f);  
   }                                             

   //Cradle Left
   if(ps2x.Button(PSB_R1)&& ps2x.Analog(PSS_RX) < 120){
   Serial.println("6th Left");
   Serial.println(ps2x.Analog(PSS_RX));
   f=f+1;
   Servo6.write(f);  
   }

 

Sylissimo
Offline
Зарегистрирован: 03.04.2022
Я объединил L1 и R1 с LX и RX для пятого и шестого сервоприводов и объединил !L1 и !R1 с LX и RX в первом и третьем сервоприводах, которые работают. Смотри ниже. Но все же нужна помощь с зажимом. Любые идеи, пожалуйста, помогите? Спасибо.

 
//5th Servo moves left and right
    //Cradle Right
   if(ps2x.Button(PSB_L1)&& ps2x.Analog(PSS_LX) > 130){           
   Serial.println("5th Right");                  
   Serial.println(ps2x.Analog(PSS_LX));        
   e=e-1;                                       
   Servo5.write(e);                                                  

   //Cradle Left
   }
   if(ps2x.Button(PSB_L1)&& ps2x.Analog(PSS_LX) < 120){
   Serial.println("5th Left");
   Serial.println(ps2x.Button(PSB_L1));
   e=e+1;
   Servo5.write(e);   
   }
 
    //6th clamp Servo moves left and right
    //Cradle Right
   if(ps2x.Button(PSB_R1)&& ps2x.Analog(PSS_RX) > 130){           
   Serial.println("6th Right");                  
   Serial.println(ps2x.Analog(PSS_RX));        
   f=f-1;                                       
   Servo6.write(f);  
   }                                             

   //Cradle Left
   if(ps2x.Button(PSB_R1)&& ps2x.Analog(PSS_RX) < 120){
   Serial.println("6th Left");
   Serial.println(ps2x.Analog(PSS_RX));
   f=f+1;
   Servo6.write(f);  
   }

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Я бы использовал L1 разжать, L2 сжать.