极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22707|回复: 14

求助PS2手柄程序的问题

[复制链接]
发表于 2012-3-12 15:16:34 | 显示全部楼层 |阅读模式
#include <PS2X_lib.h>

PS2X ps2x;
int a=0;
void setup(){
  
ps2x.config_gamepad(13,11,10,12);
  
Serial.begin(9600);

}

void loop(){
  
    ps2x.read_gamepad();

    if(ps2x.Button(PSB_PAD_UP))  
Serial.println("shang");  
           delay(20);
}
我想实现按下再松开按键,就发送一个Serial.println("shang"); 只发送一次再按再松开再发一次,怎么弄。刚学编程能力浅。求教
回复

使用道具 举报

 楼主| 发表于 2012-3-13 17:50:35 | 显示全部楼层
虚心求教!!!试了两天了都写不好只能要不就一直发要不就不发~~~~救救我
回复 支持 反对

使用道具 举报

发表于 2012-3-13 19:32:42 | 显示全部楼层
有没有参照这个帖子。。。测试帖子中的PS2手柄代码。。。看看所有按键是否能正常工作。按一次返回一次的数值?

http://www.geek-workshop.com/forum.php?mod=viewthread&tid=172
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-14 13:19:52 | 显示全部楼层
试过的,这个就是从你的那个代码里摘出来的。那个代码只能实现按下按键就会一直发送。发送的多少取决于延时的长短我试过几个方法都不行。我需要按下不管多久抬起按键这是一个周期 ,一个周期只发送一次Serial.println("shang");
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-14 13:25:26 | 显示全部楼层
弘毅 发表于 2012-3-13 19:32
有没有参照这个帖子。。。测试帖子中的PS2手柄代码。。。看看所有按键是否能正常工作。按一次返回一次的数值 ...

那段代码里面有很多是我看不懂的地方, 而且把所有有用的代码摘出来之后,发现有很多是没有用到的。那个程序也不稳定用几下手柄就会和接收器重新配对。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-14 13:25:26 | 显示全部楼层
弘毅 发表于 2012-3-13 19:32
有没有参照这个帖子。。。测试帖子中的PS2手柄代码。。。看看所有按键是否能正常工作。按一次返回一次的数值 ...

那段代码里面有很多是我看不懂的地方, 而且把所有有用的代码摘出来之后,发现有很多是没有用到的。那个程序也不稳定用几下手柄就会和接收器重新配对。
回复 支持 反对

使用道具 举报

发表于 2012-3-14 15:51:06 | 显示全部楼层
xiaop5345 发表于 2012-3-14 13:25
那段代码里面有很多是我看不懂的地方, 而且把所有有用的代码摘出来之后,发现有很多是没有用到的。那个程 ...

因为那个库是逆向解析的PS2协议,所以不是所有PS2手柄都可以用,那个实验中用的PS2无线手柄,后面生产的批次,有人买过。。。协议有变,会导致不能用。

目前用的最稳定的,就是PS2原装有线手柄。

你说的要重新配对这些问题,肯定是手柄原因造成的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-14 18:58:29 | 显示全部楼层
我只摘出需要的句子它就很稳定了~~~~我现在需要解决的就是,按下不管多久抬起按键只发送一次!!硬件现在没有问题只是软件。
回复 支持 反对

使用道具 举报

发表于 2012-3-14 20:15:52 | 显示全部楼层
xiaop5345 发表于 2012-3-14 18:58
我只摘出需要的句子它就很稳定了~~~~我现在需要解决的就是,按下不管多久抬起按键只发送一次!!硬件现在没 ...

哦,明白了,你是要软件消抖~~~~

可以参考这篇帖子,里面有软件消抖代码http://www.geek-workshop.com/forum.php?mod=viewthread&tid=74
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 14:52:28 | 显示全部楼层
#include <PS2X_lib.h>

PS2X ps2x;

void setup(){
  
ps2x.config_gamepad(13,11,10,12);
  
Serial.begin(9600);

}

void loop(){
   ps2x.read_gamepad();


    if(ps2x.Button(PSB_PAD_UP))
     {
       Serial.println("shang");
       delay(100);
       while(ps2x.Button(PSB_PAD_UP));
{delay(100);

}
     }
         
        delay(30);

}
这样写没问题吧???怎么还是不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 14:53:54 | 显示全部楼层
感觉像是哪有冲突发一个Serial.println("shang");手柄就再不反映了,而且也不重新配对
回复 支持 反对

使用道具 举报

发表于 2012-3-15 15:10:49 | 显示全部楼层
重新买几款PS2手柄测试下吧。。。只要是非原装的,都是逆向解析的协议。。。PS2的库也是逆向的。两次逆向解析后,能不能用完全看运气。

我自己买了4款PS2手柄,两款可以用,两款用起来就有莫名其妙问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 16:00:49 | 显示全部楼层
你帮我测试下后来发的那个在你的好用的手柄下能用吗???如果能用就是手柄问题我就不在编程上下工夫了。我打算用垒加的方法试试。收到一个值+1加到10发送一次命令。机器人动了就松手那第二次肯定不够时间加到10。这其实很不好先编编看吧~~~麻烦弘哥方便的话帮我测试下第二个程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 19:15:46 | 显示全部楼层
#include <PS2X_lib.h>

PS2X ps2x;
int a=0;
void setup(){
  
ps2x.config_gamepad(13,11,10,12);
  
Serial.begin(9600);

}

void loop(){
  
    ps2x.read_gamepad();

    if(ps2x.Button(PSB_PAD_UP))
       {a=a+1;
       if(a=10)
       {a=0;
     Serial.println("shang");
     delay(10);
   }
       }
     delay(500);
}
这样改了下,只要控制好按下的时间基本能用了不过有时按长了会执行两次。另外这逆向的库确实不靠谱,研究了下圆圈三角那几个键又不一样。其实还不如自己用arduino自己做个手柄来的直接。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-15 19:17:06 | 显示全部楼层
说个题外话,其实我的最终目的是要做个铁甲钢拳里的控制器!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-29 10:42 , Processed in 0.057753 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表