Add button support

This commit is contained in:
2026-03-24 22:56:21 +01:00
parent 2abc226652
commit 8ab07adfc6
2 changed files with 20 additions and 8 deletions
+19 -7
View File
@@ -5,7 +5,10 @@
extern BLEHidAdafruit blehid; extern BLEHidAdafruit blehid;
static uint8_t physBtnMask = 0; // bitmask of currently-pressed physical buttons static uint8_t physBtnMask = 0;
static uint8_t rawMaskPrev = 0;
static unsigned long debounceMs = 0;
static const unsigned long DEBOUNCE_MS = 20;
// Setup // Setup
void setupPhysicalButtons() { void setupPhysicalButtons() {
@@ -36,16 +39,25 @@ void setupPhysicalButtons() {
void processPhysicalButtons() { void processPhysicalButtons() {
if (!Bluefruit.connected()) return; if (!Bluefruit.connected()) return;
uint8_t newMask = 0; uint8_t rawMask = 0;
if (BTN_LEFT_PIN != BTN_PIN_NONE && digitalRead(BTN_LEFT_PIN) == LOW) newMask |= MOUSE_BUTTON_LEFT; if (BTN_LEFT_PIN != BTN_PIN_NONE && digitalRead(BTN_LEFT_PIN) == LOW) rawMask |= MOUSE_BUTTON_LEFT;
if (BTN_RIGHT_PIN != BTN_PIN_NONE && digitalRead(BTN_RIGHT_PIN) == LOW) newMask |= MOUSE_BUTTON_RIGHT; if (BTN_RIGHT_PIN != BTN_PIN_NONE && digitalRead(BTN_RIGHT_PIN) == LOW) rawMask |= MOUSE_BUTTON_RIGHT;
if (BTN_MIDDLE_PIN != BTN_PIN_NONE && digitalRead(BTN_MIDDLE_PIN) == LOW) newMask |= MOUSE_BUTTON_MIDDLE; if (BTN_MIDDLE_PIN != BTN_PIN_NONE && digitalRead(BTN_MIDDLE_PIN) == LOW) rawMask |= MOUSE_BUTTON_MIDDLE;
if (newMask != physBtnMask) { if (rawMask != rawMaskPrev) { rawMaskPrev = rawMask; debounceMs = millis(); }
if (rawMask != physBtnMask && (millis() - debounceMs >= DEBOUNCE_MS)) {
uint8_t newMask = rawMask;
uint8_t pressed = newMask & ~physBtnMask; // bits that just went down
uint8_t released = physBtnMask & ~newMask; // bits that just went up
physBtnMask = newMask; physBtnMask = newMask;
if (physBtnMask) blehid.mouseButtonPress(physBtnMask); if (physBtnMask) blehid.mouseButtonPress(physBtnMask);
else blehid.mouseButtonRelease(); else blehid.mouseButtonRelease();
Serial.print("[BTN] mask=0x"); Serial.println(physBtnMask, HEX); if (pressed & MOUSE_BUTTON_LEFT) Serial.println("[BTN] L press");
if (pressed & MOUSE_BUTTON_RIGHT) Serial.println("[BTN] R press");
if (pressed & MOUSE_BUTTON_MIDDLE) Serial.println("[BTN] M press");
if (released & MOUSE_BUTTON_LEFT) Serial.println("[BTN] L release");
if (released & MOUSE_BUTTON_RIGHT) Serial.println("[BTN] R release");
if (released & MOUSE_BUTTON_MIDDLE) Serial.println("[BTN] M release");
} }
} }
+1 -1
View File
@@ -60,7 +60,7 @@
// Physical button pin assignments (hardcoded - set to 0xFF to disable a button) // Physical button pin assignments (hardcoded - set to 0xFF to disable a button)
// Valid pin numbers: 0-10 (Arduino D0-D10 on XIAO nRF52840 Sense) // Valid pin numbers: 0-10 (Arduino D0-D10 on XIAO nRF52840 Sense)
#define BTN_PIN_NONE 0xFF #define BTN_PIN_NONE 0xFF
#define BTN_LEFT_PIN BTN_PIN_NONE // e.g. 0 for D0 #define BTN_LEFT_PIN 1 // D1, active-low to GND
#define BTN_RIGHT_PIN BTN_PIN_NONE // e.g. 1 for D1 #define BTN_RIGHT_PIN BTN_PIN_NONE // e.g. 1 for D1
#define BTN_MIDDLE_PIN BTN_PIN_NONE // e.g. 2 for D2 #define BTN_MIDDLE_PIN BTN_PIN_NONE // e.g. 2 for D2