{"id":5887,"date":"2022-01-08T22:34:55","date_gmt":"2022-01-08T14:34:55","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=5887"},"modified":"2022-02-09T22:47:29","modified_gmt":"2022-02-09T14:47:29","slug":"%e5%b0%8f%e7%8c%aa%e5%ad%a6arduino-ps2%e8%93%9d%e7%89%99%e6%89%8b%e6%9f%84%e6%8e%a7%e5%88%b6","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=5887","title":{"rendered":"\u5c0f\u732a\u5b66arduino\u2014PS2\u624b\u67c4\u63a7\u5236"},"content":{"rendered":"<p>\u6211\u4eec\u5728\u505a\u673a\u5668\u4eba\u8c03\u8bd5\u65f6\uff0c\u53ea\u80fd\u901a\u8fc7\u4e32\u53e3\u53d1\u547d\u4ee4\u6765\u63a7\u5236\uff0c\u6709\u65f6\u8ddf\u7740\u51fa\u95e8\u4e86\u8fd8\u5f97\u5e26\u7740\u7535\u8111\uff0c\u5b9e\u5728\u5f88\u4e0d\u65b9\u4fbf\uff0c\u4eca\u5929\u6765\u6559\u5927\u5bb6\u5982\u4f55\u4f7f\u7528PS2\u624b\u67c4\u6765\u76f4\u63a5\u63a7\u5236Arduino\u8bbe\u5907\u3002<\/p>\n<h2>\u4e00\u3001\u6750\u6599\u51c6\u5907<\/h2>\n<p>ps2\u624b\u67c4\u00a0 \u00a0*1\u00a0 \u00a0 \u00a0 \u00a0\/\/ 2.4G\u65e0\u7ebf\u901a\u4fe1\uff0c\u9065\u63a7\u8ddd\u79bb20\u7c73<\/p>\n<p>\u8fde\u63a5\u7ebf\u00a0 \u00a0 \u00a0 *\u82e5\u5e72<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2x.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5889\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2x.png\" alt=\"\" width=\"820\" height=\"680\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2x.png 820w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2x-300x249.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2x-768x637.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2x-624x517.png 624w\" sizes=\"(max-width: 820px) 100vw, 820px\" \/><\/a><\/p>\n<h2>\u4e8c\u3001\u8fde\u7ebf\u65b9\u6cd5<\/h2>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5888\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x-1024x490.png\" alt=\"\" width=\"625\" height=\"299\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x-1024x490.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x-300x144.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x-768x367.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x-624x299.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/arduino-ps2x.png 1480w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u6ce8\u610f\u7535\u6e90\u63a5<span style=\"color: #ff0000;\">3.3V<\/span><\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/port.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-5897\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/port.png\" alt=\"\" width=\"676\" height=\"301\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/port.png 676w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/port-300x134.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/port-624x278.png 624w\" sizes=\"(max-width: 676px) 100vw, 676px\" \/><\/a><\/p>\n<h2>\u4e09\u3001\u5f00\u53d1\u73af\u5883<\/h2>\n<p>\u6dfb\u52a0PS2X\u5e93\uff1a<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\"># \u4e0b\u8f7d\r\nwget https:\/\/github.com\/yanjingang\/Arduino-PS2X\/archive\/refs\/heads\/master.zip\r\n# \u590d\u5236\u5230arduino\u5e94\u7528\u63d2\u4ef6\u76ee\u5f55\r\ncp -r ~\/Arduino-PS2X\/PS2X_lib \/Applications\/Arduino.app\/Contents\/Java\/hardware\/arduino\/avr\/libraries\/<\/code><\/pre>\n<h2>\u56db\u3001\u8c03\u8bd5\u4ee3\u7801<\/h2>\n<pre class=\"pure-highlightjs\"><code class=\"\">#include \"PS2X_lib.h\"\r\n\r\nPS2X ps2x;  \/\/ create PS2 Controller Class\r\n\r\nint error = 0;\r\nbyte type = 0;\r\nbyte vibrate = 0;\r\n\r\nvoid setup() {\r\n    Serial.begin(57600);\r\n\r\n    \/\/ \u8bbe\u7f6ePS2\u63a7\u5236\u5f15\u811a\r\n    error = ps2x.config_gamepad(13, 11, 10, 12, true,true);  \/\/ setup pins and settings:  GamePad(clock, command, attention,  data, Pressures?, Rumble?) \r\n    if (error == 0) { \/\/ \u6210\u529f\r\n        Serial.println(\"Found Controller, configured successful\");\r\n        Serial.println(\"Try out all the buttons, X will vibrate the controller, faster as you press harder;\");\r\n        Serial.println(\"holding L1 or R1 will print out the analog stick values.\");\r\n        Serial.println(\"Go to [url]www.billporter.info[\/url] for updates and to report bugs.\");\r\n    } else if (error == 1){ \/\/ \u672a\u627e\u5230\u63a7\u5236\u5668\uff0c\u8bf7\u68c0\u67e5\u63a5\u7ebf\r\n        Serial.println(\"No controller found, check wiring, see readme.txt to enable debug. visit [url]www.billporter.info[\/url] for troubleshooting tips\");\r\n    }else if (error == 2){  \/\/ \u627e\u5230\u63a7\u5236\u5668\u4f46\u4e0d\u63a5\u53d7\u547d\u4ee4\r\n        Serial.println(\"Controller found but not accepting commands. see readme.txt to enable debug. Visit [url]www.billporter.info[\/url] for troubleshooting tips\");\r\n    }else if (error == 3){  \/\/ \u63a7\u5236\u5668\u62d2\u7edd\u8fdb\u5165\u538b\u529b\u6a21\u5f0f\uff0c\u53ef\u80fd\u4e0d\u652f\u6301\r\n        Serial.println(\"Controller refusing to enter Pressures mode, may not support it. \");\r\n    }\r\n    \/\/ Serial.print(ps2x.Analog(1), HEX);\r\n\r\n    \/\/ \u8bfb\u53d6PS2\u8bbe\u5907\u7c7b\u578b\r\n    type = ps2x.readType();\r\n    switch (type) {\r\n        case 0:\r\n            Serial.println(\"Unknown Controller type\");\r\n            break;\r\n        case 1:\r\n            Serial.println(\"DualShock Controller Found\");\r\n            break;\r\n        case 2:\r\n            Serial.println(\"GuitarHero Controller Found\");\r\n            break;\r\n    }\r\n}\r\n\r\nvoid loop() {\r\n    \/* You must Read Gamepad to get new values\r\n    Read GamePad and set vibration values\r\n    ps2x.read_gamepad(small motor on\/off, larger motor strenght from 0-255)\r\n    if you don't enable the rumble, use ps2x.read_gamepad(); with no values\r\n    you should call this at least once a second\r\n    *\/\r\n    if (error == 1)  \/\/ skip loop if no controller found\r\n        return;\r\n\r\n    \/\/ \u8bfb\u53d6\u624b\u67c4\u7684\u63a7\u5236\u4fe1\u53f7\r\n    if (type == 2) {  \/\/ Guitar Hero Controller\r\n        ps2x.read_gamepad();  \/\/ read controller\r\n\r\n        if (ps2x.ButtonPressed(GREEN_FRET))\r\n            Serial.println(\"Green Fret Pressed\");\r\n        if (ps2x.ButtonPressed(RED_FRET))\r\n            Serial.println(\"Red Fret Pressed\");\r\n        if (ps2x.ButtonPressed(YELLOW_FRET))\r\n            Serial.println(\"Yellow Fret Pressed\");\r\n        if (ps2x.ButtonPressed(BLUE_FRET))\r\n            Serial.println(\"Blue Fret Pressed\");\r\n        if (ps2x.ButtonPressed(ORANGE_FRET))\r\n            Serial.println(\"Orange Fret Pressed\");\r\n\r\n        if (ps2x.ButtonPressed(STAR_POWER))\r\n            Serial.println(\"Star Power Command\");\r\n\r\n        if (ps2x.Button(UP_STRUM))  \/\/ will be TRUE as long as button is pressed\r\n            Serial.println(\"Up Strum\");\r\n        if (ps2x.Button(DOWN_STRUM))\r\n            Serial.println(\"DOWN Strum\");\r\n\r\n        if (ps2x.Button(PSB_START))  \/\/ will be TRUE as long as button is pressed\r\n            Serial.println(\"Start is being held\");\r\n        if (ps2x.Button(PSB_SELECT))\r\n            Serial.println(\"Select is being held\");\r\n\r\n        if (ps2x.Button(ORANGE_FRET))  \/\/ print stick value IF TRUE\r\n        {\r\n            Serial.print(\"Wammy Bar Position:\");\r\n            Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);\r\n        }\r\n    }else {  \/\/ DualShock Controller\r\n        ps2x.read_gamepad(false, vibrate);  \/\/ read controller and set large motor to spin at 'vibrate' speed\r\n\r\n        if (ps2x.Button(PSB_START))  \/\/ will be TRUE as long as button is pressed\r\n            Serial.println(\"Start is being held\");\r\n        if (ps2x.Button(PSB_SELECT))\r\n            Serial.println(\"Select is being held\");\r\n\r\n        if (ps2x.Button(    PSB_PAD_UP)) {  \/\/ will be TRUE as long as button is pressed\r\n            Serial.print(\"Up held this hard: \");\r\n            Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);\r\n        }\r\n        if (ps2x.Button(PSB_PAD_RIGHT)) {\r\n            Serial.print(\"Right held this hard: \");\r\n            Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);\r\n        }\r\n        if (ps2x.Button(PSB_PAD_LEFT)) {\r\n            Serial.print(\"LEFT held this hard: \");\r\n            Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);\r\n        }\r\n        if (ps2x.Button(PSB_PAD_DOWN)) {\r\n            Serial.print(\"DOWN held this hard: \");\r\n            Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);\r\n        }\r\n\r\n        vibrate = ps2x.Analog(PSAB_BLUE);  \/\/ this will set the large motor vibrate speed based on how hard you press the blue (X) button\r\n\r\n        if (ps2x.NewButtonState())  \/\/ will be TRUE if any button changes state  (on to off, or off to on)\r\n        {\r\n            if (ps2x.Button(PSB_L3))\r\n                Serial.println(\"L3 pressed\");\r\n            if (ps2x.Button(PSB_R3))\r\n                Serial.println(\"R3 pressed\");\r\n            if (ps2x.Button(PSB_L2))\r\n                Serial.println(\"L2 pressed\");\r\n            if (ps2x.Button(PSB_R2))\r\n                Serial.println(\"R2 pressed\");\r\n            if (ps2x.Button(PSB_GREEN))\r\n                Serial.println(\"Triangle pressed\");\r\n        }\r\n\r\n        if (ps2x.ButtonPressed(    PSB_RED))  \/\/ will be TRUE if button was JUST pressed\r\n            Serial.println(\"Circle just pressed\");\r\n\r\n        if (ps2x.ButtonReleased(    PSB_PINK))  \/\/ will be TRUE if button was JUST released\r\n            Serial.println(\"Square just released\");\r\n\r\n        if (ps2x.NewButtonState(PSB_BLUE))  \/\/ will be TRUE if button was JUST pressed OR released\r\n            Serial.println(\"X just changed\");\r\n\r\n        if (ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1))  \/\/ print stick values if either is TRUE\r\n        {\r\n            Serial.print(\"Stick Values:\");\r\n            Serial.print(ps2x.Analog(PSS_LY), DEC);  \/\/ Left stick, Y axis. Other options: LX, RY, RX\r\n            Serial.print(\",\");\r\n            Serial.print(ps2x.Analog(PSS_LX), DEC);\r\n            Serial.print(\",\");\r\n            Serial.print(ps2x.Analog(PSS_RY), DEC);\r\n            Serial.print(\",\");\r\n            Serial.println(ps2x.Analog(PSS_RX), DEC);\r\n        }\r\n    }\r\n    delay(50);\r\n}<\/code><\/pre>\n<p>\u5c06\u793a\u4f8b\u4ee3\u7801\u4e0a\u4f20\u5230UNO\u677f\u4e2d\uff0c\u6253\u5f00PS2\u65e0\u7ebf\u624b\u67c4\u7684\u5f00\u5173\uff08ON\u3001START\u3001MODE\uff0c\u786e\u4fdd\u4e24\u4e2a\u706f\u90fd\u4eae\u8d77\uff09\uff0c\u89c2\u5bdf\u65e0\u7ebf\u63a5\u6536\u5668\u7684\u7eff\u706f\u4e0e\u624b\u67c4\u7684\u4e0a\u7684\u706f\u90fd\u505c\u6b62\u95ea\u70c1\u8bf4\u660e\u8fde\u63a5\u6210\u529f\u4e86\u3002<\/p>\n<p>\u6253\u5f00\u4e32\u53e3\u76d1\u89c6\u5668\uff0c\u53ef\u4ee5\u770b\u5230\u8fde\u63a5\u6210\u529f\uff0c\u63a7\u5236\u624b\u67c4\u67e5\u770b\u4fe1\u53f7\u63a5\u6536\u662f\u5426\u6b63\u5e38\uff08\u9700\u8981\u6ce8\u610fdemo\u91cc\u4e24\u4e2a\u6447\u67c4\u7684\u5f53\u524d\u503c\u662f\u5728\u6309L1\u548cR1\u65f6\u6253\u5370Stick Values\u8f93\u51fa\u7684\uff09\u3002<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5909\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial-1024x362.png\" alt=\"\" width=\"625\" height=\"221\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial-1024x362.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial-300x106.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial-768x272.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial-624x221.png 624w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-serial.png 1888w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u6309\u94ae\u5b9a\u4e49\uff1a<\/p>\n<p><a href=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-button.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-5893\" src=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-button-1024x560.png\" alt=\"\" width=\"625\" height=\"342\" srcset=\"https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-button.png 1024w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-button-300x164.png 300w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-button-768x420.png 768w, https:\/\/yanjingang.com\/blog\/wp-content\/uploads\/2022\/01\/ps2-button-624x341.png 624w\" sizes=\"(max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p>\u597d\u4e86\uff0c\u5355\u7247\u673a\u80fd\u51c6\u786e\u7684\u6536\u5230\u76f8\u5e94\u6309\u94ae\u4fe1\u53f7\u4e4b\u540e\uff0c\u5269\u4e0b\u7684\u5bf9\u5e94\u63a7\u5236\u903b\u8f91\u5c31\u4e0d\u5728\u6b64\u8d58\u8ff0\u4e86\uff0c\u81ea\u5df1\u5b9e\u73b0\u5373\u53ef\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>yan 22.1.8<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\uff1a<\/p>\n<p><a href=\"https:\/\/create.arduino.cc\/projecthub\/igorF2\/arduino-robot-with-ps2-controller-playstation-2-joystick-85bddc\" target=\"_blank\" rel=\"noopener noreferrer\">Arduino Robot With PS2 Controller<\/a><\/p>\n<p><a href=\"https:\/\/blog.csdn.net\/qq_16601517\/article\/details\/90349120\" target=\"_blank\" rel=\"noopener noreferrer\">Arduino\u63a7\u5236PS2\u65e0\u7ebf\u624b\u67c4<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u4eec\u5728\u505a\u673a\u5668\u4eba\u8c03\u8bd5\u65f6\uff0c\u53ea\u80fd\u901a\u8fc7\u4e32\u53e3\u53d1\u547d\u4ee4\u6765\u63a7\u5236\uff0c\u6709\u65f6\u8ddf\u7740\u51fa\u95e8\u4e86\u8fd8\u5f97\u5e26\u7740\u7535\u8111\uff0c\u5b9e\u5728\u5f88\u4e0d\u65b9\u4fbf\uff0c\u4eca\u5929\u6765\u6559\u5927\u5bb6\u5982\u4f55\u4f7f\u7528 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[353],"tags":[354,1173,1174],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5887"}],"collection":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5887"}],"version-history":[{"count":0,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5887\/revisions"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5887"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5887"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}