#include <Arduino.h>
struct SerialData {
// analog data
int LStickX, LStickY;
int RStickX, RStickY;
// digital data
int L1, R1, L2, R2;
int Up, Down, Left, Right;
int Square, Cross, Triangle, Circle;
};
SerialData parseSerialData(String serial) {
// create new object to store data
SerialData parsedData;
// parsing analog data
parsedData.LStickX = (serial.substring(0, 3)).toInt();
parsedData.LStickY = (serial.substring(3, 6)).toInt();
parsedData.RStickX = (serial.substring(6, 9)).toInt();
parsedData.RStickY = (serial.substring(9, 12)).toInt();
// parsing digital data
// triggers
parsedData.L1 = (serial.substring(12, 13)).toInt();
parsedData.L2 = (serial.substring(13, 14)).toInt();
parsedData.R1 = (serial.substring(14, 15)).toInt();
parsedData.R2 = (serial.substring(15, 16)).toInt();
// dpad
parsedData.Up = (serial.substring(16, 17)).toInt();
parsedData.Down = (serial.substring(17, 18)).toInt();
parsedData.Left = (serial.substring(18, 19)).toInt();
parsedData.Right = (serial.substring(19, 20)).toInt();
// functions
parsedData.Square = (serial.substring(20, 21)).toInt();
parsedData.Cross = (serial.substring(21, 22)).toInt();
parsedData.Triangle = (serial.substring(22, 23)).toInt();
parsedData.Circle = (serial.substring(23, 24)).toInt();
return parsedData;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() > 0) {
String inp = Serial.readString(); inp.trim();
SerialData ps2 = parseSerialData(inp);
Serial.printf(
"Analog: %d - %d - %d - %d / Triggers: %d - %d - %d - %d / Dpad: %d - %d - %d - %d / Function: %d - %d - %d- %d",
ps2.LStickX, ps2.LStickY, ps2.RStickX, ps2.RStickY, ps2.L1, ps2.L2, ps2.R1, ps2.R2, ps2.Up, ps2.Down, ps2.Left, ps2.Right, ps2.Square, ps2.Cross, ps2.Triangle, ps2.Circle
);
Serial.println();
}
delay(10); // this speeds up the simulation
}