From a91ba5a9d7ced85277ad60f1dbf381192f5c5ed8 Mon Sep 17 00:00:00 2001 From: sanine Date: Thu, 19 Oct 2023 20:12:24 -0500 Subject: update --- 12key-arduino/12key-arduino.ino | 164 +++++++++------------------------------- 1 file changed, 36 insertions(+), 128 deletions(-) (limited to '12key-arduino/12key-arduino.ino') diff --git a/12key-arduino/12key-arduino.ino b/12key-arduino/12key-arduino.ino index dc1210f..b239c17 100644 --- a/12key-arduino/12key-arduino.ino +++ b/12key-arduino/12key-arduino.ino @@ -1,120 +1,39 @@ #include -#include "pins.h" - -class Button { - protected: - unsigned int m_mask; - unsigned int m_debounceTime; - bool m_debouncing; - unsigned long m_debounceEnd; - bool m_pressed; - - void startDebounce() { - m_debouncing = true; - m_debounceEnd = millis() + m_debounceTime; - } - - public: - static unsigned int state; - Button(unsigned int index, unsigned int debounceTime=4) { - m_mask = 1 << index; - m_debounceTime = debounceTime; - m_debouncing = false; - m_pressed = false; - } - - void update(unsigned int pins) { - if (m_debouncing) { - if (millis() > m_debounceEnd) { - /* done debouncing, continue */ - m_debouncing = false; - } - else { - /* still debouncing, ignore changes */ - return; - } - } - - if ((m_mask & pins)) { - /* pressed */ - if (m_pressed) { - /* already marked */ - } - else { - /* update state */ - m_pressed = true; - state = state | m_mask; - startDebounce(); - } - } - else { - /* released */ - if (!m_pressed) { - /* already marked, ignore */ - } - else { - /* update state */ - m_pressed = false; - state = state & ~m_mask; - startDebounce(); - } - } - } +#include "Keypad.h" +#include "Mode.h" +#include "ModeMenu.h" +#include "ModeMouse.h" +#include "ModeKeyboard.h" +#include "ModeNav.h" + +Mode *modes[] = { + new ModeMenu(), + new ModeMouse(), + new ModeKeyboard(), + new ModeNav(), }; -unsigned int Button::state = 0; +Mode **Mode::modes; -Button buttons[] = { - Button(0), - Button(1), - Button(2), - Button(3), - Button(4), - Button(5), - Button(6), - Button(7), - Button(8), - Button(9), - Button(10), - Button(11), -}; +Mode *currentMode; -/* pin bitmask order: xxxx 1234 5678 9*0# */ -unsigned int ReadPins() { - byte col1 = 1 - digitalRead(COL_1); - byte col2 = 1 - digitalRead(COL_2); - byte col3 = 1 - digitalRead(COL_3); - byte row1 = 1 - digitalRead(ROW_1); - byte row2 = 1 - digitalRead(ROW_2); - byte row3 = 1 - digitalRead(ROW_3); - byte row4 = 1 - digitalRead(ROW_4); - - #define BUILD_ROW(row, c1, c2, c3) \ - ( ((row & c1) << 2) | ((row & c2) << 1) | (row & c3) ) - - byte row1_buttons = BUILD_ROW(row1, col1, col2, col3); - byte row2_buttons = BUILD_ROW(row2, col1, col2, col3); - byte row3_buttons = BUILD_ROW(row3, col1, col2, col3); - byte row4_buttons = BUILD_ROW(row4, col1, col2, col3); - - return 0 | - (row1_buttons << 9) | - (row2_buttons << 6) | - (row3_buttons << 3) | - (row4_buttons << 0); +void streamf(Stream& s, const char *fmt, ...) { + static char buf[128]; + va_list args; + va_start(args, fmt); + vsnprintf(buf, 128, fmt, args); + va_end(args); + s.print(buf); } -void setup() { - pinMode(COL_1, INPUT_PULLUP); - pinMode(COL_2, INPUT_PULLUP); - pinMode(COL_3, INPUT_PULLUP); - - pinMode(ROW_1, INPUT_PULLUP); - pinMode(ROW_2, INPUT_PULLUP); - pinMode(ROW_3, INPUT_PULLUP); - pinMode(ROW_4, INPUT_PULLUP); +void setup() { + Mouse.begin(); + Keypad::Setup(); Serial.begin(115200); + + Mode::modes = modes; + currentMode = Mode::modes[0]; } @@ -126,26 +45,15 @@ void PrintPin(unsigned int pins, int index, const char *msg) { void loop() { - unsigned int pins = ReadPins(); - for (int i=0; i<12; i++) { - buttons[i].update(pins); - } + Keypad::Update(); + + if (Keypad::state != 0) { + Mode *next = currentMode->update(Keypad::state); + if (next != NULL) { + currentMode = next; + currentMode->reset(); + } - if (Button::state != 0) { - Serial.print("buttons: "); - PrintPin(Button::state, 11, "1"); - PrintPin(Button::state, 10, "2"); - PrintPin(Button::state, 9, "3"); - PrintPin(Button::state, 8, "4"); - PrintPin(Button::state, 7, "5"); - PrintPin(Button::state, 6, "6"); - PrintPin(Button::state, 5, "7"); - PrintPin(Button::state, 4, "8"); - PrintPin(Button::state, 3, "9"); - PrintPin(Button::state, 2, "*"); - PrintPin(Button::state, 1, "0"); - PrintPin(Button::state, 0, "#"); - Serial.println(); - Button::state = 0; + Keypad::state = 0; } } -- cgit v1.2.1