debounce all buttons - clicking works

This commit is contained in:
2020-03-08 22:02:24 -07:00
parent e392e59689
commit b8bb3dd778

View File

@ -23,8 +23,8 @@ Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
bool doClicking = false; bool doClicking = false;
bool isOn = false; bool isOn = false;
unsigned long lcdTimeout = 3000; unsigned long lcdTimeout = 1000;
unsigned long lcdLastSet; unsigned long lcdLastSet = 0;
unsigned long debounceDelay = 50; unsigned long debounceDelay = 50;
@ -35,160 +35,116 @@ typedef struct
bool lastState = false; bool lastState = false;
} DebounceButton; } DebounceButton;
DebounceButton down; DebounceButton up, down, left, right, select;
void setup() { void setup() {
// Debugging output
Serial.begin(9600); Serial.begin(9600);
// set up the LCD's number of columns and rows: // set columns and rows:
lcd.begin(16, 2); lcd.begin(16, 2);
Mouse.begin(); Mouse.begin();
Keyboard.begin(); Keyboard.begin();
Serial.println("Autoclicker3000"); Serial.println("AutoClicker3000");
//lcd.print("Autoclicker on!"); lcd.print("AutoClicker3000");
//lcd.setBacklight(WHITE); lcd.setBacklight(WHITE);
lcdLastSet = millis(); lcdLastSet = millis();
} }
void debounce(DebounceButton &b, bool reading) { void debounce(DebounceButton &b, bool reading) {
lcd.setCursor(0, 0);
lcd.print(String(reading));
lcd.setCursor(1, 0);
lcd.print(String(b.state));
// lcd.setCursor(2, 0);
// lcd.print(String(reading != b.state));
// lcd.setCursor(4, 0);
// lcd.print(String(b.lastDebounceTime));
//
// lcd.setCursor(10, 0);
// lcd.print(String(millis()));
// if (reading) {
// lcd.print("true ");
// } else {
// lcd.print("false");
// }
// if (reading != b.state) {
//
// }
// lcd.setCursor(10, 1);
if ((millis() - b.lastDebounceTime) > debounceDelay) { if ((millis() - b.lastDebounceTime) > debounceDelay) {
// lcd.print("update");
//if (reading != b.state) {
b.lastState = b.state; b.lastState = b.state;
b.state = reading; b.state = reading;
//}
b.lastDebounceTime = millis(); b.lastDebounceTime = millis();
// } else {
// lcd.print("------");
} }
// lcd.setCursor(0, 1);
// if (b.state) {
// lcd.print("true ");
// } else {
// lcd.print("false");
// }
} }
void updateLCD(char* msg, int color) { bool triggered(DebounceButton &b) {
lcd.setCursor(0, 1); return b.state and !b.lastState;
lcd.print(msg);
lcd.setBacklight(color);
} }
int clickDelay = 100; // millis int clickDelay = 100; // millis
int delayChange = 10; // millis int delayChange = 10; // millis
char modeName[] = "Roblox "; char modeName[] = "Roblox ";
//uint8_t i = 0;
void loop() { void loop() {
uint8_t buttons = lcd.readButtons(); uint8_t buttons = lcd.readButtons();
debounce(up, buttons & BUTTON_UP);
debounce(down, buttons & BUTTON_DOWN); debounce(down, buttons & BUTTON_DOWN);
debounce(left, buttons & BUTTON_LEFT);
debounce(right, buttons & BUTTON_RIGHT);
debounce(select, buttons & BUTTON_SELECT);
if (buttons) { if (buttons) {
// //lcd.clear(); // if (buttons & BUTTON_UP) {
// // lcd.setCursor(0, 0); // //Keyboard.write('u');
// // lcd.print(modeName); // Serial.println("UP");
// // lcdLastSet = millis();
// // }
// if (buttons & BUTTON_UP) { //
// //Keyboard.write('u');
// Serial.println("UP"); if (triggered(down)) {
// lcdLastSet = millis(); doClicking = !doClicking;
// } lcd.setCursor(0, 1);
// if (doClicking) {
if (down.state and !down.lastState) { lcd.print("Start clicking ");
doClicking = !doClicking; } else {
lcd.setCursor(0, 1); lcd.print("Stop clicking ");
if (doClicking) {
lcd.print("Start clicking ");
} else {
lcd.print("Stop clicking ");
}
lcd.setBacklight(YELLOW);
lcdLastSet = millis();
} }
lcd.setBacklight(WHITE);
// if (buttons & BUTTON_LEFT) { lcdLastSet = millis();
// lcd.setCursor(0, 1);
// lcd.print("Slower ");
// // lcd.setBacklight(GREEN);
//
// // slow down clicking
// if (clickDelay < 1000) {
// clickDelay += delayChange;
// }
// lcdLastSet = millis();
// }
//
// if (buttons & BUTTON_RIGHT) {
// lcd.setCursor(0, 1);
// lcd.print("Faster ");
// // lcd.setBacklight(TEAL);
//
// // speed up clicking
// if (clickDelay > 50) {
// clickDelay -= delayChange;
// }
// lcdLastSet = millis();
// }
// if (buttons & BUTTON_SELECT) {
// lcd.setCursor(0, 1);
// lcd.print("SELECT ");
// // lcd.setBacklight(VIOLET);
// lcdLastSet = millis();
// }
} }
//
// if (doClicking) { if (triggered(left)) {
// //digitalWrite(onLedPin, HIGH); lcd.setCursor(0, 1);
// if (isOn) { lcd.print("Slower ");
// lcd.setBacklight(RED); // slow down clicking
// // Mouse.click(MOUSE_LEFT); if (clickDelay < 1000) {
// isOn = false; clickDelay += delayChange;
// delay(clickDelay); }
// } else { lcdLastSet = millis();
// lcd.setBacklight(WHITE); }
// isOn = true;
// delay(clickDelay); if (triggered(right)) {
// } lcd.setCursor(0, 1);
// } lcd.print("Faster ");
// // speed up clicking
// // clear second lcd line after a while if (clickDelay > 50) {
// if (millis() > lcdLastSet + lcdTimeout) { clickDelay -= delayChange;
// lcd.setCursor(0, 1); }
// lcd.print(" "); lcdLastSet = millis();
// } }
if (triggered(select)) {
// lcd.setCursor(0, 1);
// lcd.print("SELECT ");
// // lcd.setBacklight(VIOLET);
// lcdLastSet = millis();
}
}
if (doClicking) {
if (isOn) {
lcd.setBacklight(RED);
Mouse.click(MOUSE_LEFT);
isOn = false;
delay(clickDelay);
} else {
lcd.setBacklight(WHITE);
isOn = true;
delay(clickDelay);
}
}
// clear second lcd line after a while
if (lcdLastSet > 0 && millis() > lcdLastSet + lcdTimeout) {
lcd.setCursor(0, 1);
lcd.print(" ");
lcdLastSet = 0;
}
// delay(3); // delay(3);
} }