arduino连接ps2手柄控制智能小车实践记录

arduino连接ps2手柄控制智能小车实践记录试验器材1.ps2无线手柄,某宝购入2.arduinoUNO板,某宝购入3.杜邦线若干,某宝购入接线颜色插口蓝13绿10红3.3v黑GND黄11橙12引入PS2X库库下载链接:https://github.com/madsci1016/Arduino-PS2X.引入方法库文件目录直接拷贝到arduinoIDE的libraries文件夹下重启arduinoIDE之后可以看到:参考代码感谢:参考链接#inc

大家好,又见面了,我是你们的朋友全栈君。

试验器材

1.ps2无线手柄,某宝购入(建议买带插针的,直接接的貌似干扰比较强)
2.arduino UNO板,某宝购入
3.杜邦线若干,某宝购入

接线

如图

颜色 插口
蓝(Clock) 13
绿(Attention) 10
红(Power) 3.3v
黑(GND) GND
黄(Command) 11
橙(Data) 12

引入PS2X库

库下载链接: https://github.com/madsci1016/Arduino-PS2X.

引入方法

库文件目录直接拷贝到arduino IDE的libraries文件夹下

在这里插入图片描述
重启arduino IDE之后可以看到:
在这里插入图片描述
参考代码
感谢:参考链接

#include <PS2X_lib.h>   

PS2X ps2x;

//right now, the library does NOT support hot-pluggable controllers, meaning
//you must always either restart your Arduino after you connect the controller,
//or call config_gamepad(pins) again after connecting the controller.

int error = 0;
byte type = 0;
byte vibrate = 0;

void setup(){ 
   
Serial.begin(57600);

  
error = ps2x.config_gamepad(13,11,10,12, true, true);   //GamePad(clock, command, attention, data, Pressures?, Rumble?)

if(error == 0){ 
   
   Serial.println("Found Controller, configured successful");
   Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
  Serial.println("holding L1 or R1 will print out the analog stick values.");
  Serial.println("Go to www.billporter.info for updates and to report bugs.");
}
   
  else if(error == 1)
   Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
   
  else if(error == 2)
   Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
   
  else if(error == 3)
   Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
      
   type = ps2x.readType();
     switch(type) { 
   
       case 0:
        Serial.println("Unknown Controller type");
       break;
       case 1:
        Serial.println("DualShock Controller Found");
       break;
       case 2:
         Serial.println("GuitarHero Controller Found");
       break;
     }
  
}

void loop(){ 
   
   /* You must Read Gamepad to get new values Read GamePad and set vibration values ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255) if you don't enable the rumble, use ps2x.read_gamepad(); with no values you should call this at least once a second */
   
if(error == 1)
  return;
  
if(type == 2){ 
   
   
   ps2x.read_gamepad();          //read controller
   
   if(ps2x.ButtonPressed(GREEN_FRET))
     Serial.println("Green Fret Pressed");
   if(ps2x.ButtonPressed(RED_FRET))
     Serial.println("Red Fret Pressed");
   if(ps2x.ButtonPressed(YELLOW_FRET))
     Serial.println("Yellow Fret Pressed");
   if(ps2x.ButtonPressed(BLUE_FRET))
     Serial.println("Blue Fret Pressed");
   if(ps2x.ButtonPressed(ORANGE_FRET))
     Serial.println("Orange Fret Pressed");
     

    if(ps2x.ButtonPressed(STAR_POWER))
     Serial.println("Star Power Command");
   
    if(ps2x.Button(UP_STRUM))          //will be TRUE as long as button is pressed
     Serial.println("Up Strum");
    if(ps2x.Button(DOWN_STRUM))
     Serial.println("DOWN Strum");
  

    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");

   
    if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE
    { 
   
        Serial.print("Wammy Bar Position:");
        Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
    }
}

else { 
    //DualShock Controller
  
    ps2x.read_gamepad(false, vibrate);          //read controller and set large motor to spin at 'vibrate' speed
   
    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
         Serial.println("Start is being held");
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");
         
         
     if(ps2x.Button(PSB_PAD_UP)) { 
            //will be TRUE as long as button is pressed
       Serial.print("Up held this hard: ");
       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
      }
      if(ps2x.Button(PSB_PAD_RIGHT)){ 
   
       Serial.print("Right held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
      }
      if(ps2x.Button(PSB_PAD_LEFT)){ 
   
       Serial.print("LEFT held this hard: ");
        Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
      }
      if(ps2x.Button(PSB_PAD_DOWN)){ 
   
       Serial.print("DOWN held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
      }   
  
   
      vibrate = ps2x.Analog(PSAB_BLUE);        //this will set the large motor vibrate speed based on
                                              //how hard you press the blue (X) button 
   
    if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
    { 
      
        if(ps2x.Button(PSB_L3))
         Serial.println("L3 pressed");
        if(ps2x.Button(PSB_R3))
         Serial.println("R3 pressed");
        if(ps2x.Button(PSB_L2))
         Serial.println("L2 pressed");
        if(ps2x.Button(PSB_R2))
         Serial.println("R2 pressed");
        if(ps2x.Button(PSB_GREEN))
         Serial.println("Triangle pressed");
         
    }   
         
   
    if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
         Serial.println("Circle just pressed");
         
    if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
         Serial.println("Square just released");     
   
    if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
         Serial.println("X just changed");   
   
   
    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
    { 
   
        Serial.print("Stick Values:");
        Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX 
        Serial.print(",");
        Serial.print(ps2x.Analog(PSS_LX), DEC);
        Serial.print(",");
        Serial.print(ps2x.Analog(PSS_RY), DEC);
        Serial.print(",");
        Serial.println(ps2x.Analog(PSS_RX), DEC);
    }

}

delay(50);
     
}

注意事项:

  1. PS2手柄需要与接收器配对,按MODE键配对。
  2. PS2手柄配对超时灯会熄灭,按手柄上的START键重新配对
  3. 杜邦线接PS2接收器针脚时如果不好接线可以把插头拔掉直接接入
    如图:在这里插入图片描述

成果展示:

arduino IDE自带串口工具查看串口输出:
手柄检测
按键测试
续集链接-https://blog.csdn.net/qq_30019617/article/details/109444260
续集里重新买了一个ps2手柄和接收器,带插针的。感觉要稳定一些。之前的一直有干扰。不是很灵敏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134220.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • h5 实现图片上传 案例

    h5 实现图片上传 案例如何在 h5 中实现图片上传 单图片上传 先写一个按钮 通过点击按钮触发文件上传的 onclick 事件 divclass btn onclick takePhone 请点击进行拍照 inputtype file name file id upload capture camera onchange uploadImg accept image value inputtype file name file id upload capture camera onchange uploadImg accept image divclass btn onclick takePhone

    2025年6月25日
    5
  • 利用ffmpeg将H264解码为RGB

    利用ffmpeg将H264解码为RGB由于公司买到了一个不提供解码器的设备,我不得已还要做解码的工作。在网上找了一圈,H264解码比较方便的也就是ffmpeg一系列的函数库了,原本设备中也是用这套函数库解码,但厂家不给提供,没办法,只得自己搞了。

    2022年6月23日
    47
  • mac 查看端口占用_cmd查端口占用

    mac 查看端口占用_cmd查端口占用命令(port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILLlsof-itcp:portlsof-i:port

    2022年7月27日
    3
  • qlineedit设置光标_光标选不中

    qlineedit设置光标_光标选不中QLineEdit的光标当失去焦点后仍然显示的问题:  在lineedit和其它按钮之间切换焦点时,注意lineedit的设置有顺序,否则当失去焦点时仍有光标闪,或者得到焦点无光标。  使lineedit有效:lineedit-&gt;setEnabled(true);lineedit-&gt;setFocus();    使lineedit无效:l…

    2022年10月5日
    2
  • 恶意软件&quot;跨平台&quot; 小心钱包很受伤

    恶意软件&quot;跨平台&quot; 小心钱包很受伤

    2022年1月5日
    46
  • List 去重的 6 种方法[通俗易懂]

    List 去重的 6 种方法[通俗易懂]方法1:contains判断去重(有序)要进行数据去重,我们首先想到的是新建一个集合,然后循环原来的集合,每次循环判断原集合中的循环项,如果当前循环的数据,没有在新集合中存在就插入,已经存在了就舍弃,这样当循环执行完,我们就得到了一个没有重复元素的集合了,实现代码如下:publicclassListController{publicstaticvoidmain(String[]args){List<Integer>list=newArra

    2022年5月26日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号