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 {
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();
}