walk mode working forwards and backwards

This commit is contained in:
2020-03-09 15:56:26 -07:00
parent 5369196e14
commit 4309d68e58

View File

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