diff --git a/AutoClicker3000.ino b/AutoClicker3000.ino index 0a38e01..f80afcb 100644 --- a/AutoClicker3000.ino +++ b/AutoClicker3000.ino @@ -46,11 +46,23 @@ char *modeNames[] = { "Walk forward " }; +extern void clickActivate(); +extern void clickSlower(); +extern void clickFaster(); +extern void walkBackward(); + +void (*upButtonFuncs[])() = { NULL, NULL }; +void (*downButtonFuncs[])() = { clickActivate, walkBackward }; +void (*leftButtonFuncs[])() = { clickSlower, NULL }; +void (*rightButtonFuncs[])() = { clickFaster, NULL }; + + bool doClicking = false; unsigned long lastClickTime = 0; int clickColor = 0; + void setup() { Serial.begin(9600); @@ -93,49 +105,32 @@ void loop() { debounce(select, buttons & BUTTON_SELECT); if (buttons) { - // if (buttons & BUTTON_UP) { - // //Keyboard.write('u'); - // Serial.println("UP"); - // lcdLastSet = millis(); - // } - // + if (triggered(up)) { + if (upButtonFuncs[currMode] != NULL) { + upButtonFuncs[currMode](); + } + } if (triggered(down)) { - doClicking = !doClicking; - lcd.setCursor(0, 1); - if (doClicking) { - lcd.print("Start clicking "); - } else { - lcd.print("Stop clicking "); + if (downButtonFuncs[currMode] != NULL) { + downButtonFuncs[currMode](); } - lcd.setBacklight(WHITE); - lcdLastSet = millis(); } if (triggered(left)) { - lcd.setCursor(0, 1); - lcd.print("Slower "); - // slow down clicking - if (clickDelay < 1000) { - clickDelay += delayChange; + if (leftButtonFuncs[currMode] != NULL) { + leftButtonFuncs[currMode](); } - lcdLastSet = millis(); } if (triggered(right)) { - lcd.setCursor(0, 1); - lcd.print("Faster "); - // speed up clicking - if (clickDelay > 50) { - clickDelay -= delayChange; + if (rightButtonFuncs[currMode] != NULL) { + rightButtonFuncs[currMode](); } - lcdLastSet = millis(); } if (triggered(select)) { - currMode = (currMode + 1) % MODE_COUNT; - lcd.setCursor(0, 0); - lcd.print(modeNames[currMode]); + changeMode(); } } @@ -162,3 +157,51 @@ void loop() { lcdLastSet = 0; } } + +void changeMode() { + // TODO cancel current mode before changing (stop clicking) + currMode = (currMode + 1) % MODE_COUNT; + lcd.setCursor(0, 0); + lcd.print(modeNames[currMode]); +} + +// mode functions + +void clickActivate() { + doClicking = !doClicking; + lcd.setCursor(0, 1); + if (doClicking) { + lcd.print("Start clicking "); + } else { + lcd.print("Stop clicking "); + } + lcd.setBacklight(WHITE); + lcdLastSet = millis(); +} + +void clickSlower() { + if (clickDelay < 1000) { + clickDelay += delayChange; + } + + lcd.setCursor(0, 1); + lcd.print("Slower "); + lcdLastSet = millis(); +} + +void clickFaster() { + // speed up clicking + if (clickDelay > 50) { + clickDelay -= delayChange; + } + + lcd.setCursor(0, 1); + lcd.print("Faster "); + lcdLastSet = millis(); +} + +void walkBackward() { + lcd.setCursor(0, 1); + lcd.print("Walk backward "); + lcdLastSet = millis(); +}