增加手柄震动功能,右扳机按下时,触发震动,连接时震动,断开时震动,跳跃落地时震动

This commit is contained in:
myperworld committed 2025-10-17 15:37:41 +08:00
1 parent e33a6b894d
commit 0ef2bb0d7f
6 files changed
+439 -251

No files matched your search

@@ -0,0 +1,97 @@
/* ---------------------------------
* 蓝牙手柄(Xbox)模块
* 包含:蓝牙实体、状态变量、连接处理函数
* 不包含:手柄数据解析逻辑(processControllerData)
------------------------------------- */
#ifndef XBOX_BLUETOOTH_H
#define XBOX_BLUETOOTH_H
#include <Arduino.h>
#include <XboxSeriesXControllerESP32_asukiaaa.hpp> // Xbox手柄库
/************ Xbox手柄全局实体 *************/
// 连接目标手柄的MAC地址(保持原地址不变)
XboxSeriesXControllerESP32_asukiaaa::Core xboxController("0a:27:12:5c:71:79");
// 震动
XboxSeriesXHIDReportBuilder_asukiaaa::ReportBase repo;
/************ 外部函数声明 *************/
// 声明主文件中的数据处理函数(在主文件中实现)
extern void processControllerData(const XboxControllerNotificationParser& data);
/************ 蓝牙手柄核心函数 *************/
// 初始化蓝牙手柄(供主文件setup()调用)
void xboxControllerInit() {
// 启动蓝牙连接
xboxController.begin();
}
// 处理蓝牙手柄通知(循环调用,保持连接并接收数据)
void process_xbox_notif() {
xboxController.onLoop(); // 维持蓝牙连接状态
if (xboxController.isConnected()) {
if (xboxController.isWaitingForFirstNotification()) {
// 可添加调试信息(如"等待手柄数据...")
} else {
// 接收数据后,调用主文件的解析函数
processControllerData(xboxController.xboxNotif);
}
} else {
// 可添加调试信息(如"手柄未连接")
}
}
// xbox 按键震动
void XboxKeyVibration()
{
repo.setAllOff();
repo.v.select.center = true;
repo.v.select.left = true;
repo.v.select.right = true;
repo.v.select.shake = true;
repo.v.power.center = 20;
repo.v.power.shake = 20;
repo.v.timeActive = 10;
xboxController.writeHIDReport(repo);
delay(250);
repo.v.power.center = 0;
repo.v.power.shake = 0;
xboxController.writeHIDReport(repo);
}
// xbox 扳机键震动
void XboxtrigRTVibration()
{
repo.setAllOff();
repo.v.select.center = true;
repo.v.select.left = true;
repo.v.select.right = true;
repo.v.select.shake = true;
static uint16_t TrigMax = XboxControllerNotificationParser::maxTrig;
uint8_t power = (uint8_t)((float)xboxController.xboxNotif.trigRT / (float)TrigMax * 100) * 0.8;
// Serial.print("trigRT:" + String(xboxController.xboxNotif.trigRT));
// Serial.print(",TrigMax:" + String(TrigMax));
// Serial.println(",power:" + String(power));
repo.v.power.center = power;
repo.v.power.shake = power;
repo.v.power.center = power;
repo.v.power.shake = power;
repo.v.timeActive = 10;
xboxController.writeHIDReport(repo);
delay(500);
repo.v.power.center = 0;
repo.v.power.shake = 0;
xboxController.writeHIDReport(repo);
}
#endif // XBOX_BLUETOOTH_H