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