Ардуино Дуалшок 4 С++

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

Я использую 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);

person Tony Rios    schedule 03.04.2017    source источник
comment
if (PS4.connected()) { if ( PS4.getAnalogHat(LeftHatY) › 137 || PS4.getAnalogHat(LeftHatY) ‹ 117) { M3-›setSpeed(PS4.getAnalogHat(LeftHatY)); PS4.setLed (зеленый); PS4.setLedFlash(100 ,100); }   -  person Tony Rios    schedule 04.04.2017


Ответы (2)


Вам нужно добавить условие допуска 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);
    }
}

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

person jabujavi    schedule 05.04.2017

 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 Motor. Большое спасибо за помощь. Я занимался 3D-печатью деталей для робота/шасси, поэтому взял перерыв в программировании.

person Tony Rios    schedule 06.08.2017