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);
80void Connect(Stream &bluetooth_stream,
const String &bluetooth_device_address) {
81 if (bluetooth_device_address.length() != 17 || bluetooth_device_address[2] !=
':' || bluetooth_device_address[5] !=
':' ||
82 bluetooth_device_address[8] !=
':' || bluetooth_device_address[11] !=
':' || bluetooth_device_address[14] !=
':') {
83 g_debug_serial.println(
"Error: Invalid MAC address format. Expected: XX:XX:XX:XX:XX:XX");
87 g_debug_serial.print(
"Start to connect ");
88 g_debug_serial.println(kBluetoothDeviceAddress);
92 bluetooth_stream.println(
"AT+DISCON");
97 bluetooth_stream.println(
"AT+RESET");
102 bluetooth_stream.println(
"AT+ECHO=0");
107 bluetooth_stream.println(
"AT+ROLE=0");
112 bluetooth_stream.println(
"AT+AUTOCON=0");
117 bluetooth_stream.print(
"AT+CON=");
118 bluetooth_stream.println(bluetooth_device_address);
121 g_debug_serial.println(
"Connected");
126 g_debug_serial.begin(115200);
128 Serial.begin(kBluetoothModuleSerialBaudRate);
130 Connect(Serial, kBluetoothDeviceAddress);
140 g_codex_pad_frame_decoder.Update();
142 static uint32_t s_print_time = 0;
143 if (s_print_time == 0 || s_print_time + 30 < millis()) {
144 s_print_time = millis();
148 g_debug_serial.print(
"Up:");
150 g_debug_serial.print(
", ");
151 g_debug_serial.print(
"Down:");
153 g_debug_serial.print(
",");
154 g_debug_serial.print(
"Left:");
156 g_debug_serial.print(
", ");
157 g_debug_serial.print(
"Right:");
159 g_debug_serial.print(
", ");
160 g_debug_serial.print(
"Square(X):");
162 g_debug_serial.print(
", ");
163 g_debug_serial.print(
"Triangle(Y):");
165 g_debug_serial.print(
", ");
166 g_debug_serial.print(
"Cross(A):");
168 g_debug_serial.print(
", ");
169 g_debug_serial.print(
"Circle(B):");
171 g_debug_serial.print(
", ");
172 g_debug_serial.print(
"L1:");
174 g_debug_serial.print(
", ");
175 g_debug_serial.print(
"L2:");
177 g_debug_serial.print(
", ");
178 g_debug_serial.print(
"L3:");
180 g_debug_serial.print(
", ");
181 g_debug_serial.print(
"R1:");
183 g_debug_serial.print(
", ");
184 g_debug_serial.print(
"R2:");
186 g_debug_serial.print(
", ");
187 g_debug_serial.print(
"R3:");
189 g_debug_serial.print(
", ");
190 g_debug_serial.print(
"Select:");
192 g_debug_serial.print(
", ");
193 g_debug_serial.print(
"Start:");
195 g_debug_serial.print(
", ");
196 g_debug_serial.print(
"Home:");
198 g_debug_serial.print(
", ");
204 g_debug_serial.print(
"L(X:");
206 g_debug_serial.print(
", Y:");
208 g_debug_serial.print(
"), R(X:");
210 g_debug_serial.print(
", Y:");
212 g_debug_serial.println(
")");