function pointer delegation for direction clicks

This commit is contained in:
2020-03-09 10:56:20 -07:00
parent e68a31689c
commit 5369196e14

View File

@ -46,11 +46,23 @@ char *modeNames[] = {
"Walk forward " "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; bool doClicking = false;
unsigned long lastClickTime = 0; unsigned long lastClickTime = 0;
int clickColor = 0; int clickColor = 0;
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
@ -93,49 +105,32 @@ void loop() {
debounce(select, buttons & BUTTON_SELECT); debounce(select, buttons & BUTTON_SELECT);
if (buttons) { if (buttons) {
// if (buttons & BUTTON_UP) { if (triggered(up)) {
// //Keyboard.write('u'); if (upButtonFuncs[currMode] != NULL) {
// Serial.println("UP"); upButtonFuncs[currMode]();
// lcdLastSet = millis(); }
// } }
//
if (triggered(down)) { if (triggered(down)) {
doClicking = !doClicking; if (downButtonFuncs[currMode] != NULL) {
lcd.setCursor(0, 1); downButtonFuncs[currMode]();
if (doClicking) {
lcd.print("Start clicking ");
} else {
lcd.print("Stop clicking ");
} }
lcd.setBacklight(WHITE);
lcdLastSet = millis();
} }
if (triggered(left)) { if (triggered(left)) {
lcd.setCursor(0, 1); if (leftButtonFuncs[currMode] != NULL) {
lcd.print("Slower "); leftButtonFuncs[currMode]();
// slow down clicking
if (clickDelay < 1000) {
clickDelay += delayChange;
} }
lcdLastSet = millis();
} }
if (triggered(right)) { if (triggered(right)) {
lcd.setCursor(0, 1); if (rightButtonFuncs[currMode] != NULL) {
lcd.print("Faster "); rightButtonFuncs[currMode]();
// speed up clicking
if (clickDelay > 50) {
clickDelay -= delayChange;
} }
lcdLastSet = millis();
} }
if (triggered(select)) { if (triggered(select)) {
currMode = (currMode + 1) % MODE_COUNT; changeMode();
lcd.setCursor(0, 0);
lcd.print(modeNames[currMode]);
} }
} }
@ -162,3 +157,51 @@ void loop() {
lcdLastSet = 0; 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();
}