mirror of
https://github.com/esphome/esphome.git
synced 2024-11-26 17:05:21 +01:00
Suppress first rotary encoder event (#3532)
Co-authored-by: Maurice Makaay <mmakaay1@xs4all.net>
This commit is contained in:
parent
dd24ffa24e
commit
f8969605e8
2 changed files with 3 additions and 1 deletions
|
@ -103,7 +103,7 @@ void IRAM_ATTR HOT RotaryEncoderSensorStore::gpio_intr(RotaryEncoderSensorStore
|
||||||
rotation_dir = -1;
|
rotation_dir = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rotation_dir != 0) {
|
if (rotation_dir != 0 && !arg->first_read) {
|
||||||
auto *first_zero = std::find(arg->rotation_events.begin(), arg->rotation_events.end(), 0); // find first zero
|
auto *first_zero = std::find(arg->rotation_events.begin(), arg->rotation_events.end(), 0); // find first zero
|
||||||
if (first_zero == arg->rotation_events.begin() // are we at the start (first event this loop iteration)
|
if (first_zero == arg->rotation_events.begin() // are we at the start (first event this loop iteration)
|
||||||
|| std::signbit(*std::prev(first_zero)) !=
|
|| std::signbit(*std::prev(first_zero)) !=
|
||||||
|
@ -119,6 +119,7 @@ void IRAM_ATTR HOT RotaryEncoderSensorStore::gpio_intr(RotaryEncoderSensorStore
|
||||||
*std::prev(first_zero) += rotation_dir; // store the rotation into the previous slot
|
*std::prev(first_zero) += rotation_dir; // store the rotation into the previous slot
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
arg->first_read = false;
|
||||||
|
|
||||||
arg->state = new_state;
|
arg->state = new_state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ struct RotaryEncoderSensorStore {
|
||||||
int32_t max_value{INT32_MAX};
|
int32_t max_value{INT32_MAX};
|
||||||
int32_t last_read{0};
|
int32_t last_read{0};
|
||||||
uint8_t state{0};
|
uint8_t state{0};
|
||||||
|
bool first_read{true};
|
||||||
|
|
||||||
std::array<int8_t, 8> rotation_events{};
|
std::array<int8_t, 8> rotation_events{};
|
||||||
bool rotation_events_overflow{false};
|
bool rotation_events_overflow{false};
|
||||||
|
|
Loading…
Reference in a new issue