коррекция двух моторов при шим регулировке
- Войдите на сайт для отправки комментариев
Вс, 11/04/2021 - 14:32
Здравствуйте.
Я собрал гусеничную платформу с двумя моторами. Ардуино, 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);
}
}
Всем спасибо!!!
поспешил с вопросом, сам догадался