我正在尝试使用DualShock 4(PS4)来控制Arduino uno板。我很难对操纵杆进行编程,我想使用操纵杆控制电机;我希望当我按up(++i)时马达前进,当我按下(--i)时马达后退,当我不移动操纵杆时马达没有速度。我可以向一个方向移动马达,速度增加了,但我不能让另一个方向工作。我似乎无法在操纵杆的值(PS4.getAnalogHat(LeftHatY) > 137 || PS4.getAnalogHat(LeftHatY) < 117)和马达的值(0 - 255)之间建立联系。
我用的是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);发布于 2017-04-05 19:37:02
要移动电机,需要添加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);
}
}使用一些错误处理可能会更好,但您可以从它开始。
发布于 2017-08-06 23:35:32
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打印机器人/底盘的零件,这就是为什么我抽出时间编程。
https://stackoverflow.com/questions/43194587
复制相似问题