Add the ability to use a custom delay time for button presses.

This commit is contained in:
Anna Rose Wiggins 2021-12-22 22:07:57 +00:00
parent 70d7bdd3b2
commit aef35f96a0
5 changed files with 23 additions and 17 deletions

View file

@ -48,7 +48,8 @@ bool LatchedButton::Update(Joystick* js) {
}
PulsedButton::PulsedButton(uint8_t vbutton, Reader* reader, bool double_action, bool split) : Button(vbutton, reader) {
PulsedButton::PulsedButton(uint8_t vbutton, Reader* reader, uint8_t release_delay, bool double_action, bool split) : Button(vbutton, reader) {
this->release_delay = release_delay;
this->release_time1 = 0;
this->release_time2 = 0;
if (double_action) {
@ -80,21 +81,21 @@ bool PulsedButton::Update(Joystick* js) {
case BUTTON_PULSED:
if (reader->On()) {
js->PressButton(vbutton);
release_time1 = millis() + 250;
release_time1 = millis() + release_delay;
}
break;
case BUTTON_PULSED_DOUBLE_ACTION:
js->PressButton(vbutton);
release_time1 = millis() + 250;
release_time1 = millis() + release_delay;
break;
case BUTTON_PULSED_DOUBLE_ACTION_SPLIT:
if (reader->On()) {
js->PressButton(vbutton);
release_time1 = millis() + 250;
release_time1 = millis() + release_delay;
}
else {
js->PressButton(vbutton2);
release_time2 = millis() + 250;
release_time2 = millis() + release_delay;
}
break;
}
@ -103,11 +104,12 @@ bool PulsedButton::Update(Joystick* js) {
}
EncoderButton::EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton, int8_t tick_threshold) : Button(vbutton, NULL) {
EncoderButton::EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton, int8_t tick_threshold, uint8_t release_delay) : Button(vbutton, NULL) {
this->type = ENCODER_PULSED_SPLIT;
this->vbutton2 = vbutton + 1;
this->encoder = new Encoder(pin1, pin2);
this->last_value = encoder->read();
this->release_delay = release_delay;
this->release_time1 = 0;
this->release_time2 = 0;
this->ticks = 0;
@ -135,13 +137,13 @@ bool EncoderButton::Update(Joystick* js) {
if (ticks >= tick_threshold) {
js->PressButton(vbutton);
changed = true;
release_time1 = millis() + 250;
release_time1 = millis() + release_delay;
ticks = 0;
}
else if (ticks <= tick_threshold * -1) {
js->PressButton(vbutton2);
changed = true;
release_time2 = millis() + 250;
release_time2 = millis() + release_delay;
ticks = 0;
}