коррекция двух моторов при шим регулировке

Wolff_2020
Offline
Зарегистрирован: 04.02.2021

Здравствуйте.

Я собрал гусеничную платформу с двумя моторами. Ардуино,  L298N, PS2 джойстик.

Всё отлично работает.

НО!!!!

Есть плавное управление джойстиком и ещё добавил изменение скорости кнопками (нажатие одной один скоростной предел, нажатие второй другой скоростной предел). При одной скорости опережает один движок, про второй опережает другой движок. Соответственно обычная корректировка - изменения предела (rrr в скетче) не помогает. Может подскажите что делать?

часть скетча, где управление:

//коробка передач
static int ttt = 0;

if(ps2x.Button(PSB_L1))  {   
ttt = 110;
  delay(50);
  }
  
 if(ps2x.Button(PSB_L2))  {   
 ttt = 250; 
   delay(50);
  }

int rrr = (ttt / 105) * 100; //коррекция правого мотора в процентах

  ps2x.read_gamepad(false, false); // disable vibration of the controller
     //присвоение соотношений джойстиков
     int nJoyLU = map(ps2x.Analog(PSS_LY), 127, 0, 0, ttt); //левый мотор вперед 
     int nJoyLD = map(ps2x.Analog(PSS_LY), 128, 255, 0, ttt); //левый мотор назад
     int nJoyRU = map(ps2x.Analog(PSS_RY), 127, 0, 0, rrr); //правый мотор вперед
     int nJoyRD = map(ps2x.Analog(PSS_RY), 128, 255, 0, ttt); //правый мотор назад

// левый мотор вперед 
     if(nJoyLU>50) {
        digitalWrite(MOTORA_2,HIGH);
        digitalWrite(MOTORA_1,LOW);
        analogWrite(ENA, nJoyLU);
     }
     if (abs(nJoyLU)<50) {
        analogWrite(ENA, 0);
     }
   
// левый мотор назад 
     if(nJoyLD>50) {
        digitalWrite(MOTORA_2,LOW);
        digitalWrite(MOTORA_1,HIGH);
        analogWrite(ENA, nJoyLD);
     }
     if (abs(nJoyLD)<50) {
        analogWrite(ENA, 0);
     }

// правый мотор вперед 
     if(nJoyRU>50) {
        digitalWrite(MOTORB_2,HIGH);
        digitalWrite(MOTORB_1,LOW);
        analogWrite(ENB, nJoyRU);
     }
     if (abs(nJoyRU)<50) {
        analogWrite(ENB, 0);
     }

// правый мотор назад     
     if(nJoyRD>50) {
        digitalWrite(MOTORB_2,LOW);
        digitalWrite(MOTORB_1,HIGH);
        analogWrite(ENB, nJoyRD);
     }
     if (abs(nJoyRD)<50) {
        analogWrite(ENB, 0);
     }     

 delay(50);
 }    
}

 

 

Wolff_2020
Offline
Зарегистрирован: 04.02.2021

Всем спасибо!!!

поспешил с вопросом, сам догадался