добавлен перезапуск ble при отключении, чтобы можно было повторно подключится к мышке

добаволено моргание как при подключении, так и при отключении
This commit is contained in:
Razvalyaev 2025-05-23 20:33:37 +03:00
parent 7dffb83d05
commit 1d0bd57326

View File

@ -75,17 +75,7 @@ void setup() {
#ifdef RGB_LED #ifdef RGB_LED
ledControl.forceColor(255, 0, 0); // Красный ledControl.forceColor(255, 0, 0); // Красный
#endif//RGB_LED #endif//RGB_LED
// Запуск BLE мыши (HID) ble_init();
bleMouse.init();
#ifdef RGB_LED
#ifndef DISABLE_RGB_UUID
// Создаём BLE-сервис для подстветки
ledControl.setupBLEService(bleMouse.server);
#endif//DISABLE_RGB_UUID
#endif//RGB_LED
// Запуск BLE мыши (HID)
bleMouse.begin();
// BLE готов — красный
//---------Инициализация USB — синий------------ //---------Инициализация USB — синий------------
#ifdef RGB_LED #ifdef RGB_LED
@ -102,7 +92,7 @@ void setup() {
} }
void loop() { void loop() {
handleBleConnectionBlink(); handleBleConnection();
#ifndef DISABLE_USB #ifndef DISABLE_USB
// чтение мыши // чтение мыши
usbHost.task(); usbHost.task();
@ -130,28 +120,60 @@ void loop() {
} }
} }
#endif #endif
// --- повторный запуск BLE, если отключение ---
static bool wasConnected = false;
bool currentlyConnected = bleMouse.isConnected();
if (wasConnected && !currentlyConnected) {
Serial.println("BLE disconnected, restarting advertising...");
bleMouse.begin(); // запускаем advertising снова
}
wasConnected = currentlyConnected;
}
void ble_init()
{
// Запуск BLE мыши (HID)
bleMouse.init();
#ifdef RGB_LED
#ifndef DISABLE_RGB_UUID
// Создаём BLE-сервис для подстветки
ledControl.setupBLEService(bleMouse.server);
#endif//DISABLE_RGB_UUID
#endif//RGB_LED
// Запуск BLE мыши (HID)
bleMouse.begin();
} }
bool lastBleStatus = false; bool lastBleStatus = false;
bool blinkInProgress = false; bool blinkInProgress = false;
unsigned long blinkStartTime = 0; unsigned long blinkStartTime = 0;
const unsigned long blinkDuration = 250; // длительность моргания (мс) const unsigned long blinkDuration = 250; // длительность моргания (мс)
void handleBleConnectionBlink() { void handleBleConnection() {
bool currentStatus = bleMouse.isConnected(); bool currentStatus = bleMouse.isConnected();
// Обнаружили подключение // --- обработка изменения статуса подключения ---
if (currentStatus && !lastBleStatus) { if (currentStatus != lastBleStatus) {
// Визуальная вспышка
blinkInProgress = true; blinkInProgress = true;
blinkStartTime = millis(); blinkStartTime = millis();
ledControl.forceBrightness(100); // максимальная яркость ledControl.forceBrightness(100); // максимальная яркость
ledControl.forceColor(255, 255, 255); // белая вспышка ledControl.forceColor(255, 255, 255); // белый
// перезапуск ble если мышка отключена
if (!currentStatus) {
BLEDevice::deinit(true); // true — полное удаление и перезапуск
ble_init();
}
} }
// Завершаем вспышку // Завершаем вспышку
if (blinkInProgress && (millis() - blinkStartTime > blinkDuration)) { if (blinkInProgress && (millis() - blinkStartTime > blinkDuration)) {
blinkInProgress = false; blinkInProgress = false;
ledControl.applyColor(); // восстанавливаем предыдущий цвет ledControl.applyColor(); // восстановить предыдущий цвет
} }
lastBleStatus = currentStatus; lastBleStatus = currentStatus;
} }