用Arduino做機械人或其他實作,常會用到輸入和輸出的模組,文字輸出可以用LCD顯示器輕鬆實現,而輸入方面,如果是少許按鍵,可以用普通按鍵實現,但如果需要一個遊戲的介面,如果自製就但十分麻煩,這時候就需要用到PS2遙控器。
打開Arduino序列埠監測器,按下PS2的按鍵,會列印出相應的語句。

注意,PS2接收器的電壓是3.3V,如果接5V接收器會即時報銷。如果使用Sensor Shield V5.0的話,3V3在Bluetooth Interface的第一隻引腳,板的表面並沒有標示的。

x1#include <PS2X_lib.h>2#include <Wire.h>3#include <EEPROM.h>4
5PS2X ps2x1;6
7// PIN OF PS2 CONTROLLER8#define DATA 119#define COMMAND 1010#define ATTENTION 911#define CLOCK 1212// 也可以是任意的引腳,線路接對就可以13 14int error = 0;15byte type = 0;16byte vibrate = 0;17
18unsigned long timer;19
20void setup() {21 Serial.begin(115200);22 error = ps2x1.config_gamepad(CLOCK, COMMAND, ATTENTION, DATA, true, true);23 type = ps2x1.readType();24}25
26void loop() {27 if (millis() - timer >= 30) {28 timer = millis();29
30 if (error != 0) {31 //如果error不是0,可能是無線斷了,自動重新連接32 error = ps2x1.config_gamepad(CLOCK, COMMAND, ATTENTION, DATA, true, true);33 type = ps2x1.readType();34 }35 else {36 if (type == 1) { //type是1即平時所用的PS2遙控37 ps2x1.read_gamepad(false, vibrate);38
39 if (ps2x1.Button(PSB_PAD_UP)) Serial.println("UP");40 else if (ps2x1.Button(PSB_PAD_DOWN)) Serial.println("DOWN");41 else if (ps2x1.Button(PSB_PAD_LEFT)) Serial.println("LEFT");42 else if (ps2x1.Button(PSB_PAD_RIGHT)) Serial.println("RIGHT");43 44 else if (ps2x1.Button(PSB_START)) Serial.println("START");45 else if (ps2x1.Button(PSB_SELECT)) Serial.println("SELECT");46 47 else if (ps2x1.Button(PSAB_CROSS)) Serial.println("CROSS");48 else if (ps2x1.Button(PSB_TRIANGLE)) Serial.println("TRIANGLE");49 else if (ps2x1.Button(PSB_SQUARE)) Serial.println("SQUARE");50 else if (ps2x1.Button(PSB_CIRCLE)) Serial.println("CIRCLE");51 52 vibrate = ps2x1.Analog(PSAB_CROSS); // vibrate when press 'x' button53 //ps2x1.Analog(PSS_LX), ps2x1.Analog(PSS_LY), 54 //ps2x1.Analog(PSS_RX), ps2x1.Analog(PSS_RY) 55 //則為JoyStrick的值,可以用Serial.println( ps2x1.Analog(PSS_LX) );56 //試一下57 }58 }59 }60}