2017-04-03 32 views
4

我试图控制一个使用DualShock 4(PS4)的Arduino uno板。我很难编程操纵杆PS4.getAnalogHat(LeftHatY)我想用操纵杆控制电机;当我按下时(++i),向后按下时(--i),我想让电机前进,而当我不移动操纵杆时没有速度。我能够在一个方向上移动电机,速度增加,但我无法得到另一个方向的工作。我似乎无法连接游戏杆值(PS4.getAnalogHat(LeftHatY) > 137 || PS4.getAnalogHat(LeftHatY) < 117)和电机值(0 - 255)。Arduino DualShock 4 C++

我正在使用USB屏蔽和电机屏蔽。

我需要帮忙搞清楚第一条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); 
+0

如果(PS4.connected()){ 如果 (PS4.getAnalogHat(LeftHatY)> 137 || PS4.getAnalogHat(LeftHatY)<117) { M3-> setSpeed(PS4.getAnalogHat(LeftHatY)) ; PS4.setLed(Green); PS4.setLedFlash(100,100); } –

回答

1

您需要添加的min(117)max(137)条件容忍移动电机。然后,操纵杆的posibles值映射到电机转速的范围

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); 
    } 
} 

这可能是一些错误处理更好,但你可以开始使用它。

0
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打印机器人/底盘部件,这就是为什么我花时间编程。