首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino DualShock 4 C++

Arduino DualShock 4 C++
EN

Stack Overflow用户
提问于 2017-04-04 05:26:56
回答 2查看 845关注 0票数 4

我正在尝试使用DualShock 4(PS4)来控制Arduino uno板。我很难对操纵杆进行编程,我想使用操纵杆控制电机;我希望当我按up(++i)时马达前进,当我按下(--i)时马达后退,当我不移动操纵杆时马达没有速度。我可以向一个方向移动马达,速度增加了,但我不能让另一个方向工作。我似乎无法在操纵杆的值(PS4.getAnalogHat(LeftHatY) > 137 || PS4.getAnalogHat(LeftHatY) < 117)和马达的值(0 - 255)之间建立联系。

我用的是USB防护罩和电机防护罩。

我需要帮助来弄清楚第一个if语句。

以下是我到目前为止拥有的代码:

代码语言:javascript
复制
if (PS4.connected()) 
{
    if (PS4.getAnalogHat(LeftHatY) > 137)
    {
        M3->setSpeed(255)); 
        PS4.setLed(Green);
        PS4.setLedFlash(100 ,100);
    }
}

我希望M3的值随着我增加操纵杆角度而增加:

代码语言:javascript
复制
for (int i=0; i<=255; ++i)
    M3->setSpeed(i);
EN

回答 2

Stack Overflow用户

发布于 2017-04-05 19:37:02

要移动电机,需要添加min(117)max(137)公差条件。然后,将操纵杆的可能值映射到电机的速度范围

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-08-06 23:35:32

代码语言:javascript
复制
 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打印机器人/底盘的零件,这就是为什么我抽出时间编程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43194587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档