function pointer delegation for direction clicks
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user