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