我正在尝试使用DualShock 4(PS4)控制Arduino uno板。我编写操纵杆时遇到困难PS4.getAnalogHat(LeftHatY)
我想用操纵杆控制电机;当我按下(++i
)时,我希望电机前进,当我按下(--i
)时向后按下,而当我不移动操纵杆时我没有速度。我能够向一个方向移动电机,速度增加,但我无法让另一个方向工作。我似乎无法在操纵杆值(PS4.getAnalogHat(LeftHatY) > 137 || PS4.getAnalogHat(LeftHatY) < 117)
和电机值(0
- 255
)之间建立连接。
我正在使用USB 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);
答案 0 :(得分: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);
}
}
通过一些错误处理可能会更好,但你可以从它开始。
答案 1 :(得分: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&amp; D的变速控制电机。 Arduino电机护罩。非常感谢您的帮助。我是机器人/机箱的3D打印部件,这就是我花时间编程的原因。