Feels good, but switches bounce

This commit is contained in:
Neale Pickett 2023-12-31 17:22:47 -07:00
parent 0960b0e2f7
commit d5b1addddc
1 changed files with 51 additions and 54 deletions

View File

@ -33,8 +33,6 @@ void setup() {
static HIDSubDescriptor node(_hidReportDescriptor, sizeof(_hidReportDescriptor)); static HIDSubDescriptor node(_hidReportDescriptor, sizeof(_hidReportDescriptor));
HID().AppendDescriptor(&node); HID().AppendDescriptor(&node);
buttonState.buttons = 0x0000;
buttonState.hatAndConstant = 0x08;
buttonState.axis[0] = 0; buttonState.axis[0] = 0;
buttonState.axis[1] = 0; buttonState.axis[1] = 0;
buttonState.axis[2] = 0; buttonState.axis[2] = 0;
@ -43,8 +41,6 @@ void setup() {
buttonState.reserved1[i] = 0x0; buttonState.reserved1[i] = 0x0;
} }
buttonState.finalConstant = 0x0200020002000200; buttonState.finalConstant = 0x0200020002000200;
buttonState.buttons = 0;
buttonState.hatAndConstant = 0x08; // This apparently means "nothing pressed"
} }
// The 3.3v Pro Micro is on the slow side. // The 3.3v Pro Micro is on the slow side.
@ -52,11 +48,11 @@ void setup() {
// send an update every 10ms, // send an update every 10ms,
// and hope we don't miss anything while we're doing USB stuff. // and hope we don't miss anything while we're doing USB stuff.
void loop() { void loop() {
static uint16_t buttons = 0; register uint16_t buttons = 0;
static unsigned long next = 0; register uint16_t buttons_prior = 0;
unsigned long now = millis();
buttons |= (0 while (1) {
buttons = (0
| (digitalRead(BUTTON_BLUE) << 0) | (digitalRead(BUTTON_BLUE) << 0)
| (digitalRead(BUTTON_GREEN) << 1) | (digitalRead(BUTTON_GREEN) << 1)
| (digitalRead(BUTTON_RED) << 2) | (digitalRead(BUTTON_RED) << 2)
@ -74,9 +70,10 @@ void loop() {
| (digitalRead(SOLO_ORANGE) << 14) // Not in USB packet | (digitalRead(SOLO_ORANGE) << 14) // Not in USB packet
); );
if (next > now) { if (buttons == buttons_prior) {
return; continue;
} }
buttons_prior = buttons;
// Open pullup reads 1, so invert everything we've read // Open pullup reads 1, so invert everything we've read
buttons = ~buttons; buttons = ~buttons;
@ -103,6 +100,6 @@ void loop() {
// Send an update // Send an update
HID().SendReport(0, (uint8_t *)&buttonState, 27); HID().SendReport(0, (uint8_t *)&buttonState, 27);
next = now + 10;
buttons = 0; buttons = 0;
}
} }