2017-04-03 27 views
4

私はDualShock 4(PS4)を使用してArduino unoボードを制御しようとしています。ジョイスティックをプログラミングするのが難しいです。PS4.getAnalogHat(LeftHatY)ジョイスティックを使ってモーターをコントロールしたいです。ジョイスティックを動かしていないときに、()を押したときに前進し、戻るとき(--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.getAnalogHat(LeftHatY)> 137 || PS4.getAnalogHat(LeftHatY)<117){ M3-> setSpeed(PS4.getAnalogHat(LeftHatY))IF(PS4.connected()){ 場合; PS4.setLed(緑); 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モーターシールド。助けてくれてありがとう。私はロボット/シャーシ用の3次元印刷部品でしたので、時間をかけてプログラミングをしました。

関連する問題