diff --git a/AutoClicker3000.ino b/AutoClicker3000.ino index f80afcb..966fd10 100644 --- a/AutoClicker3000.ino +++ b/AutoClicker3000.ino @@ -36,31 +36,43 @@ DebounceButton up, down, left, right, select; typedef enum { MODE_LEFT_CLICK, - MODE_WALK_FORWARD, + MODE_WALKING, MODE_COUNT } Mode; Mode currMode = MODE_LEFT_CLICK; char *modeNames[] = { - "Left click ", - "Walk forward " + "Click mode ", + "Walking mode " +}; + +int modeColors[] = { + WHITE, + YELLOW }; extern void clickActivate(); extern void clickSlower(); extern void clickFaster(); + +extern void walkForward(); extern void walkBackward(); -void (*upButtonFuncs[])() = { NULL, NULL }; +void (*upButtonFuncs[])() = { NULL, walkForward }; void (*downButtonFuncs[])() = { clickActivate, walkBackward }; void (*leftButtonFuncs[])() = { clickSlower, NULL }; void (*rightButtonFuncs[])() = { clickFaster, NULL }; +extern void cancelClicking(); +extern void cancelWalking(); + +void (*cancelModeFuncs[])() = { cancelClicking, cancelWalking }; bool doClicking = false; unsigned long lastClickTime = 0; int clickColor = 0; +bool doWalking = false; void setup() { @@ -75,7 +87,7 @@ void setup() { lcd.print("AutoClicker 3000"); lcd.setCursor(0, 1); lcd.print("For Jasper"); - lcd.setBacklight(YELLOW); + lcd.setBacklight(VIOLET); lcdLastSet = millis(); } @@ -130,10 +142,14 @@ void loop() { } if (triggered(select)) { + if (cancelModeFuncs[currMode] != NULL) { + cancelModeFuncs[currMode](); + } changeMode(); } } + // TODO make into mode-specific action func if (doClicking) { unsigned long time = millis(); if ((unsigned long)(time - lastClickTime) >= clickDelay) { @@ -159,10 +175,16 @@ void loop() { } void changeMode() { - // TODO cancel current mode before changing (stop clicking) currMode = (currMode + 1) % MODE_COUNT; lcd.setCursor(0, 0); lcd.print(modeNames[currMode]); + lcd.setBacklight(modeColors[currMode]); +} + +void updateLCD(char* msg) { + lcd.setCursor(0, 1); + lcd.print(msg); + lcdLastSet = millis(); } // mode functions @@ -200,8 +222,41 @@ void clickFaster() { lcdLastSet = millis(); } -void walkBackward() { - lcd.setCursor(0, 1); - lcd.print("Walk backward "); - lcdLastSet = millis(); +void cancelClicking() { + doClicking = false; +} + +// +// walking mode +// +void walkForward() { + if (!doWalking) { + walk('w', "Forward "); + } else { + cancelWalking(); + updateLCD("Stop "); + } +} + +void walkBackward() { + if (!doWalking) { + walk('s', "Backwards "); + } else { + cancelWalking(); + updateLCD("Stop "); + } +} + +void walk(char key, char* msg) { + cancelWalking(); + + Keyboard.press(key); + doWalking = true; + + updateLCD(msg); +} + +void cancelWalking() { + doWalking = false; + Keyboard.releaseAll(); }