//库 #include #include #include //定义宏 #define PS2_DAT 12 //14 #define PS2_CMD 13 //15 #define PS2_SEL 14 //16 #define PS2_CLK 16 //17 //实例化 using namespace websockets; WebsocketsClient client; PS2X ps2x; //基础配置wifi+socket+PS2 const char* ssid = "test"; const char* password = "dd88888888"; const char* websockets_server_host = "caner.top"; const uint16_t websockets_server_port = 49700; int error = 0; //控制器配置错误 //重置 void(*resetFunc) (void) = 0; //WIFI连接 void WifiConnect() { Serial.print("WIFI连接中."); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("WiFi IP:"); Serial.println(WiFi.localIP()); // socket连接 SocketConnect(); } //socket连接 void SocketConnect() { Serial.print("服务器连接中."); // 连接socekt bool connected = client.connect(websockets_server_host, websockets_server_port, "/"); while (!connected){ delay(1000); Serial.print("."); connected = client.connect(websockets_server_host, websockets_server_port, "/"); } Serial.println(""); Serial.println("服务器连接成功"); ControllerInt(); } //控制器初始化 void ControllerInt() { Serial.println("控制器匹配中."); error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false); while(error!=0){ delay(1000); Serial.print("."); error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, false, false); } Serial.println(""); Serial.println("控制器连接成功"); } //PS2操作并发送信息 void PS2Control() { ps2x.read_gamepad(); // 上 if (ps2x.Button(PSB_PAD_UP) || ps2x.Button(PSB_TRIANGLE)){ client.send("UP"); Serial.println("UP"); } // 右 if (ps2x.Button(PSB_PAD_RIGHT) || ps2x.ButtonPressed(PSB_CIRCLE)){ client.send("RIGHT"); Serial.println("RIGHT"); } // 左 if (ps2x.Button(PSB_PAD_LEFT) || ps2x.ButtonReleased(PSB_SQUARE)){ client.send("LEFT"); Serial.println("LEFT"); } // 下 if (ps2x.Button(PSB_PAD_DOWN) || ps2x.NewButtonState(PSB_CROSS)){ client.send("DOWN"); Serial.println("DOWN"); } // 功能键 if (ps2x.NewButtonState()) { 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)){ // STOP Serial.println("R2 pressed"); client.send("STOP"); Serial.println("STOP"); } } // 车站加速+转向加速 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); 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); } } // C++初始化 void setup() { Serial.begin(115200); // 连接wifi + socket +PS2 WifiConnect(); } //C++ 死循环 void loop() { // let the websockets client check for incoming messages if (client.available()) { client.poll(); } // PS2控制器 if (error > 0 ) return; PS2Control(); delay(50); }