Arduino DualShock 4 переполнения стека

Я пытаюсь управлять платой Arduino uno, используя DualShock 4 (PS4). У меня проблемы с программированием джойстиков PS4.getAnalogHat(LeftHatY) Я хочу управлять мотором с помощью джойстика; Я хочу, чтобы мотор двигался вперед при нажатии вверх (++i) назад, когда я нажимаю вниз (--i), и нет скорости, когда я не двигаю джойстик. Я могу двигать двигатель в одном направлении, и скорость увеличивается, но я не могу заставить работать другое направление. Я не могу установить связь между значениями джойстика (PS4.getAnalogHat(LeftHatY) > 137 || PS4.getAnalogHat(LeftHatY) < 117) и значения двигателя (0255).

Я использую USB Shield и Motor Shield.

Мне нужна помощь в выяснении первого оператора if.

Вот код, который у меня есть:

if (PS4.connected())
{
if (PS4.getAnalogHat(LeftHatY) > 137)
{
M3->setSpeed(255));
PS4.setLed(Green);
PS4.setLedFlash(100 ,100);
}
}

Я хочу, чтобы значение M3 увеличивалось при увеличении угла джойстика:

for (int i=0; i<=255; ++i)
M3->setSpeed(i);

4

Решение

Вы должны добавить условие min(117) а также max(137) толерантность к движению мотора. Затем сопоставьте возможные значения джойстика с диапазоном скорости двигателя.

if (PS4.connected())
{
int analogValue = PS4.getAnalogHat(LeftHatY);
if (analogValue  > 137 || analogValue < 117)
{
int motorValue = y = map(x, 117, 137 , 0, 255);
M3->setSpeed(motorValue);
PS4.setLed(Green);
PS4.setLedFlash(100 ,100);
}
}

Может быть лучше с некоторой обработкой ошибок, но вы могли бы начать с этого.

1

Другие решения

 uint16_t s = PS4.getAnalogHat(RightHatY);

if (PS4.getAnalogHat(RightHatY) < 117 )
{
s = map (s, 117,  0, 0, 250);
M3->run(FORWARD);
M3->setSpeed(s);
PS4.setLed(Green);
PS4.setLedFlash(100, 100);
}

if (PS4.getAnalogHat(RightHatY) > 137)
{
s = map (s, 137, 0, 0, -250);
M3->run(BACKWARD);
M3->setSpeed(s);
PS4.setLed(Green);
PS4.setLedFlash(100, 100);
}

Это решение проблемы, которую я изначально задавал. Регулирование скорости двигателя с помощью Dualshock 4 & Arduino Моторный щит. Большое спасибо за помощь. Я занимался 3D-печатью деталей для робота / шасси, поэтому я взял перерыв на программирование.

0

По вопросам рекламы [email protected]