30#include <SoftwareSerial.h>
39constexpr uint8_t kDebugSerialRxPin = 6;
40constexpr uint8_t kDebugSerialTxPin = 5;
44const String kBluetoothDeviceAddress =
"0C:3D:5E:9D:80:99";
49constexpr uint32_t kBluetoothModuleSerialBaudRate = 115200;
57SoftwareSerial g_debug_serial(kDebugSerialRxPin, kDebugSerialTxPin);
79void Connect(Stream &bluetooth_stream,
const String &bluetooth_device_address) {
80 if (bluetooth_device_address.length() != 17 || bluetooth_device_address[2] !=
':' || bluetooth_device_address[5] !=
':' ||
81 bluetooth_device_address[8] !=
':' || bluetooth_device_address[11] !=
':' || bluetooth_device_address[14] !=
':') {
82 g_debug_serial.println(
"Error: Invalid MAC address format. Expected: XX:XX:XX:XX:XX:XX");
86 g_debug_serial.print(
"Start to connect ");
87 g_debug_serial.println(kBluetoothDeviceAddress);
91 bluetooth_stream.println(
"AT+DISCON");
96 bluetooth_stream.println(
"AT+RESET");
101 bluetooth_stream.println(
"AT+ECHO=1");
106 bluetooth_stream.println(
"AT+ROLE=0");
111 bluetooth_stream.print(
"AT+CON=");
112 bluetooth_stream.println(bluetooth_device_address);
115 g_debug_serial.println(
"Connected");
121 g_debug_serial.begin(115200);
123 Serial.begin(kBluetoothModuleSerialBaudRate);
125 Connect(Serial, kBluetoothDeviceAddress);
135 g_codex_pad_frame_decoder.Update();
137 static uint32_t s_print_time = 0;
138 if (s_print_time == 0 || s_print_time + 30 < millis()) {
139 s_print_time = millis();
141 g_debug_serial.print(
"Up:");
143 g_debug_serial.print(
", ");
144 g_debug_serial.print(
"Down:");
146 g_debug_serial.print(
",");
147 g_debug_serial.print(
"Left:");
149 g_debug_serial.print(
", ");
150 g_debug_serial.print(
"Right:");
152 g_debug_serial.print(
", ");
153 g_debug_serial.print(
"Square(X):");
155 g_debug_serial.print(
", ");
156 g_debug_serial.print(
"Triangle(Y):");
158 g_debug_serial.print(
", ");
159 g_debug_serial.print(
"Cross(A):");
161 g_debug_serial.print(
", ");
162 g_debug_serial.print(
"Circle(B):");
164 g_debug_serial.print(
", ");
165 g_debug_serial.print(
"L1:");
167 g_debug_serial.print(
", ");
168 g_debug_serial.print(
"L2:");
170 g_debug_serial.print(
", ");
171 g_debug_serial.print(
"L3:");
173 g_debug_serial.print(
", ");
174 g_debug_serial.print(
"R1:");
176 g_debug_serial.print(
", ");
177 g_debug_serial.print(
"R2:");
179 g_debug_serial.print(
", ");
180 g_debug_serial.print(
"R3:");
182 g_debug_serial.print(
", ");
183 g_debug_serial.print(
"Select:");
185 g_debug_serial.print(
", ");
186 g_debug_serial.print(
"Start:");
188 g_debug_serial.print(
", ");
189 g_debug_serial.print(
"Home:");
191 g_debug_serial.print(
", ");
197 g_debug_serial.print(
"L(X:");
199 g_debug_serial.print(
", Y:");
201 g_debug_serial.print(
"), R(X:");
203 g_debug_serial.print(
", Y:");
205 g_debug_serial.println(
")");
CodexPad controller data frame decoding main class.
@ kTriangleY
Triangle or Y.
@ kLeftStickX
Left stick X axis.
@ kRightStickY
Right stick Y axis.
@ kLeftStickY
Left stick Y axis.
@ kRightStickX
Right stick X axis.