ARDUINO Роборука с геймпадом от пс2(нужно сдать 12.05.23)

Grishka_genius5555

✩✩✩✩✩✩✩
30 Апр 2023
11
0
Помогите с кодом. не могу понять что не так. При включении руки нечего не раюотает двигаю немного джостики и какие то микро движения есть, Хотя порой и нормальные но очень с большой задержкой. НЕ МОГУ ПОНЯТЬ В ЧЁМ ПРОБЛЕМА, ПОМОГИТЕ ПОЖАЛУЙСТА.
Код использовал из проекта оживления роборуки и танка
 

Вложения

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
Строка 26
C++:
Servo claw, wrist, arm, yaw;
. Разве так делается?
В каких единицах заданы параметры?
C++:
#define CLAW_MIN 0
#define CLAW_MAX 300
#define WRIST_MIN 0
#define WRIST_MAX 450
#define ARM_MIN 150
#define ARM_MAX 600
#define YAW_MIN 0
#define YAW_MAX 1800
Далее:
C++:
  // изменение позиции на величину скорости
    clawP += map(ps2x.Analog(PSS_RX), 0, 255, MAX_ARM_SPEED, -MAX_ARM_SPEED);
    wristP += map(ps2x.Analog(PSS_RY), 0, 255, MAX_ARM_SPEED, -MAX_ARM_SPEED);
    armP += map(ps2x.Analog(PSS_LY), 0, 255, -MAX_ARM_SPEED, MAX_ARM_SPEED);
    yawP += map(ps2x.Analog(PSS_LX), 0, 255, MAX_ARM_SPEED, -MAX_ARM_SPEED);

    // ограничиваем скорость
    clawP = constrain(clawP, CLAW_MIN, CLAW_MAX);
    wristP = constrain(wristP, WRIST_MIN, WRIST_MAX);
    armP = constrain(armP, ARM_MIN, ARM_MAX);
    yawP = constrain(yawP, YAW_MIN, YAW_MAX);
Как понять выражение "изменение позиции на величину скорости"? Сначала приводишь положение ручек джойстика от значений 0 ÷ 255 к значениям 40 ÷ (-40), потом ограничиваешь значения пределами от 0 до, например, CLAW_MAX не более 300,, а дальше
C++:
// переводим в градусы и применяем
    claw.write(clawP / 10);
    wrist.write(wristP / 10);
    arm.write(armP / 10);
    yaw.write(yawP / 10);
делишь значения на 10. Ну и на сколько должен повернуться сервопривод? Максимум на 4 градуса?
 
Изменено:

Grishka_genius5555

✩✩✩✩✩✩✩
30 Апр 2023
11
0
Я не шарю в програмировании((( Можешь исправить код пожалуйста

У меня каждая серва на 180 градусов и мне надо что бы 4 из них управлялись 2-мя джостиками а одна (которая захват) кнопками R1 И R2( на одну зажимание на другую разжимание)

вот, это всё что я смог сделать можешь пожалуйста подкорректировать
 

Вложения

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
можешь пожалуйста подкорректировать
Давай попробуем.

каждая серва на 180 градусов
Так почему задаешь такие пределы?
C++:
#define CLAW_MIN 0
#define CLAW_MAX 1800
#define WRIST_MIN 0
#define WRIST_MAX 1800
#define WROST_MIN 0
#define WROST_MAX 1800
#define ARM_MIN 150
#define ARM_MAX 600
#define YAW_MIN 0
#define YAW_MAX 1800
 

Grishka_genius5555

✩✩✩✩✩✩✩
30 Апр 2023
11
0
не знаю. я вообще не шарю. Они же типо должны на 180 градусов крутиться. разве нет?

напиши отредактированный код и потом объяснишь что не правильно что бы я хоть как то понял
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
типо потм делятся на 10
Нет, не они. Ты положение ручки джойстика масшбабируешь в пределах от MAX_ARM_SPEED до -MAX_ARM_SPEED, от 40 до -40. Потом ограничиваешь эти значения от CLAW MIN до CLAW MAX, то есть от 0 до 1800. Все, что ниже 0 будет равно нулю, а максимум будет 40. И во это значение (от 0 до 40) делится на 10.
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
Потому, что
C++:
clawP += map(ps2x.Analog(PSS_RX), 0, 255, MAX_ARM_SPEED, -MAX_ARM_SPEED);
Чему равно MAX_ARM_SPEED?
Как работает функция map() можно поискать в интернете
 

Grishka_genius5555

✩✩✩✩✩✩✩
30 Апр 2023
11
0
я так и не понял как ты получил 40 и -40, это константы или ты их- вычисляешь как то по формуле?

как 40 и -40 если приделы джостика -255 до 255

так я нашёл откуда 40, я в место 40 могу пеоставить любое значение? это на что то влияет?

тоесть вместо 40 я ставлю 1800 и после всех вычислений в конце кода у меня получиться что серва как раз будеть двигаться максимум до 180 градусов?
А как понять чувствительность джостика к какой либо позиции?

А какой придел ставить у кнопок, у R1 у стиков то 0 и 255 а у кнопок 0 и 1023? или сколько я просто не знаю
 

Grishka_genius5555

✩✩✩✩✩✩✩
30 Апр 2023
11
0
Оформи код соответствующим тэгом
@viktor1703,Окей у меня проблема в другом я когда её подключаю они встаёт в оприделенные положения и не двигается ни руками ни джостиком, как буд то её клинит. С чем это может быть связанно?

#include <Servo.h>
#include <PS2X_lib.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
PS2X ps2x;
void setup() {
servo1.attach(4); // Подключение сервоприводов к пинам
servo2.attach(5);
servo3.attach(6);
servo4.attach(7);
servo5.attach(8);
ps2x.config_gamepad( 14, 15, 16, 17); // Подключение PS2 к аналоговым входам
Serial.begin(57600);
}
void loop() {
ps2x.read_gamepad();
int leftStickX = ps2x.Analog(PSS_LX);
int leftStickY = ps2x.Analog(PSS_LY);
int rightStickX = ps2x.Analog(PSS_RX);
int rightStickY = ps2x.Analog(PSS_RY);
int servoAngle1 = map(leftStickX, 0, 255, 0, -255); // Управление сервоприводами с геймпада
int servoAngle2 = map(leftStickY, 0, 255, 0, 90);
int servoAngle3 = map(rightStickX, 0, 255, 0, 90);
int servoAngle4 = map(rightStickY, 0, 255, 0, 90);
int servoAngle5 = 90;
if (ps2x.Button(PSB_R1)) { // Управление поворотом сервоприводов с помощью кнопок R1 и R2
servoAngle5 += 1;
if (servoAngle5 > 90) {
servoAngle5 = 90;
}
}
if (ps2x.Button(PSB_R2)) {
servoAngle5 -= 1;
if (servoAngle5 < 0) {
servoAngle5 = 0;
}
}
servo1.write(servoAngle1); // Установка угла поворота сервоприводов
servo2.write(servoAngle2);
servo3.write(servoAngle3);
servo4.write(servoAngle4);
servo5.write(servoAngle5);

}


вот другой код но реагировать на него она тоже не хочет
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
другой код но реагировать на него она тоже не хочет
я когда её подключаю они встаёт в оприделенные положения
значит на сервы приходят управляющие сигналы. Надо вывести "отладочную информацию" в com-порт. Как меняются servoAngle1,2,3,4,5 при воздействии на джойстик?
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
Отправляешь значения переменных в com-порт и смотришь, что когда меняется, что не меняется, ищешь проблему в коде, исправляешь, снова прошиваешь МК и всё по новой, пока не заработает как тебе хотелось. Вот почитай, довольно доступно описано
 

Вложения

Grishka_genius5555

✩✩✩✩✩✩✩
30 Апр 2023
11
0
@viktor1703, у меня не конектится теперь джостик со своим ресирвером на ресирвере горит красная и моргает зеленая а на джостике обе моргают я не знаю что делать((((