Не могу понять почему не изменяется скорость шаговых двигетелй при упарвлении с ps2
недавно только занимаюсь этим.может кто-то подскажет
#include <PS2X_lib.h>
#include <GyverStepper.h>
PS2X ps2x;
int error = 0;
byte type = 0;
byte vibrate = 0;
int speed = 200;
int flright = 0;
int flleft = 0;
GStepper<STEPPER2WIRE> stepper(2048, 5, 6, 7);
GStepper<STEPPER2WIRE> stepper2(2048, 2, 3, 4);
void setup() {
Serial.begin(9600);
stepper.setRunMode(KEEP_SPEED);
stepper2.setRunMode(KEEP_SPEED);
stepper.setSpeed(speed);
stepper2.setSpeed(-speed);
error = ps2x.config_gamepad(13,11,10,12,true,true);
delay(100);
type = ps2x.readType();
delay(100);
while(error !=0 and type!=1){
error = ps2x.config_gamepad(13,11,10,12,true,true);
delay(100);
type = ps2x.readType();
delay(100);
Serial.print(error);
Serial.println(type);
delay(100);
}
Serial.println("Ok");
delay(1000);
}
void loop() {
ps2x.read_gamepad(false,vibrate);
if(ps2x.Button(PSB_R1)){
flright =1;
flleft= 0;
if(ps2x.Analog(PSS_RY) == 0 ){
stepper.reverse(0);
stepper.tick();
stepper2.reverse(0);
stepper2.tick();
}
}
if(ps2x.Button(PSB_L1)){
flright = 0;
flleft = 1;
if(ps2x.Analog(PSS_LY) == 0 ){
stepper.reverse(1);
stepper.tick();
stepper2.reverse(1);
stepper2.tick();
}
}
if(flright == 1 and ps2x.ButtonPressed(PSB_PAD_UP)) {
speed += 20;
Serial.print("скорость увеличиваеься :");
Serial.println(speed);
}
if(flright == 1 and ps2x.ButtonPressed(PSB_PAD_DOWN)){
if(speed >= 25){
speed-=20;
Serial.print("скорость уменьшается :");
Serial.println(speed);
}
}
if(ps2x.ButtonPressed(PSB_GREEN) and flleft == 1){
speed += 20;
Serial.print("скорость увеличиваеься :");
Serial.println(speed);
}
if(ps2x.ButtonPressed(PSB_BLUE) and flleft == 1){
if(speed >= 25){
speed-=20;
Serial.print("скорость уменьшается :");
Serial.println(speed);
}
}
delay(50);
}
Что такое stepper.tick();
?
запуск шагового двигателя
Наврядли. Попробуйте в документации почитать - с какой частотой нужно вызывать этот метод.
Со стандартными примерами с этой библиотеки все работает с этим методом,когда управление идет через ps2 ,то скорость практически не изменяется
вообще написано как можно чаще вызывать этот метод.как задать частоту его вызова?не собо шарю просто
Значит вызывать его нужно постоянно в loop, а не под условием, как сейчас.
и как это должно выглядеть?
b707
17.Январь.2023 22:03:37
9
А с чего ей меняться, если вы переменную speed для управления моторами никак не используете?
Покажите, в какой строке программы вы меняете скорость двигателей?
хотя бы вот тут,и дальше в таких же 4-х if
но я и в ручную пробовал менять,ничего не происзодит.какую бы скорость не задавал в методе setSpeed(); ,остается одна и та же
b707
17.Январь.2023 23:14:01
12
Geka777:
хотя бы вот тут
В этом месте вы меняете значение переменной speed
. А где вы меняете скорость двигателей?
Вот вы открыли кошелек, посчитали деньги. Допустим 1000 рублей. Записали сумму на бумажку, закрыли кошелек.
Теперь если исправить цифру на бумажке, скажем, на 3000 рублей - думаете от этого сумма в кошельке изменится?
Ваша переменная speed
всего лишь такая же бумажка. От того что вы ее изменили, скорость мотора не поменяется.
тут да,согласен.но вопрос в другом,что в стандартном примере с библиотеки все работает,когда задаешь методом setSpeed() в ручную в setup() скорость,тут с джостиком так не работает
b707
17.Январь.2023 23:22:15
14
выше вы писали, что все работает
или все-таки не работает?
Вам надо сначала проверить, меняетеся ли скорость в стандартном примере, без управления по ps2. Если нет - то ps2 нет смысла и подключать, сначала надо разобраться библиотекой
там все работает,в том то и дело.если бы и там не работало без джостика,то не стал бы просить помощи
кстати,такая же проблемы ,когда подключаешь датчики расстояния,скорость тоже перестает меняться
b707
17.Январь.2023 23:26:06
17
И что?
вам не понятно, что я вам написал в сообщении 12?
Вы меняете переменную, а скорость моторам не задаете.
b707
17.Январь.2023 23:27:17
19
ответ в этой фразе
Кто за вас будет давать команду setSpeed() ? Пушкин?
b707
17.Январь.2023 23:28:02
20
Geka777:
это я понял
сомневаюсь…
Если поняли - то исправляйте ошибку в коде.