2017-04-03 31 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打印機器人/底盤部件,這就是爲什麼我花時間編程。