Comments (8)
сделали поддержку энкодера, назвали ее PCINT
PCINT это обычные прерывания с пина, к энкодеру это никакого отношения не имеет... Библиотека изначально сделана универсальной для работы с прерываниями на любых платформах, в прерывании нужно вызвать специальный тикер, см примеры. К слову PCINT есть и у МК AVR
from encbutton.
Если можно, то в класс кнопки class Button : public VirtButton {}
добавить чтение в секции setup(){}
с дебонсом, что то наподобие этого
bool read_debounce() {
static uint32_t ms;
static uint8_t pinVal;
ms = millis();
pinVal = digitalRead(pin);
if (_invert != 0) pinVal = !pinVal;
if (ms - _lastChange < _dbTime) {
_lastTime = _time;
_time = ms;
_changed = 0;
return _state;
// return EBread(pin) ^ read_bf(EB_INV);
} else {
_lastTime = _time;
_time = ms;
_lastState = _state;
_state = pinVal;
if (_state != _lastState) {
_lastChange = ms;
_changed = 1;
if (_state) {
_pressTime = _time;
}
} else {
_changed = 0;
}
return _state;
// return EBread(pin) ^ read_bf(EB_INV);
}
}
Пробовал поэкспериментировать - но как то криво работало у меня это.
Оставил как было
bool read() {
return EBread(pin) ^ read_bf(EB_INV);
}
from encbutton.
Нет, это ерунда какая то. Опять же чтобы подобный код работал - его нужно вызывать циклично, в сетап это не будет работать
from encbutton.
Если по каким то причинам нужно именно остаться в сетап, без примера с флагом как я писал ранее, то можно воспользоваться состоянием busy и погрузиться в цикл
void setup() {
do {
btn.tick();
if (btn.hold()) foo();
} while (btn.busy());
}
Не тестировал, но должно работать
from encbutton.
Есть нужно две и более кнопок затащить в обработку при старте - соответственно
while (b1.busy() || b2.busy() || b3.busy());
from encbutton.
Нет, это ерунда какая то. Опять же чтобы подобный код работал - его нужно вызывать циклично, в сетап это не будет работать
Вы как адепт
ардуино, все же создали многие библиотеки "универсальными", работающими и с другими МК.
Сейчас популярные чипы для "самоделок" это esp32-s3
и teensy
4.1
Используя вашу библиотеку, еще версии 2, столкнулся с тем, что на esp32 она работала не совсем так как надо, особенно с энкодерами.
Стал разбираться, и оказалось, разработчики esp32 аппаратно сделали поддержку энкодера, назвали ее PCINT
- то есть прерывания аппаратные.
Вы не думали реализовать поддержку PCINT
в своей библиотеке?
from encbutton.
сделали поддержку энкодера, назвали ее PCINT
PCINT это обычные прерывания с пина, к энкодеру это никакого отношения не имеет... Библиотека изначально сделана универсальной для работы с прерываниями на любых платформах, в прерывании нужно вызвать специальный тикер, см примеры. К слову PCINT есть и у МК AVR
Да вот у espressif это вроде какая то "своя" реализация на аппаратном уровне.
И с ней работать только используя esp-idf, но чтобы сторонние библиотеки это использовали - я не встречал.
Поэтому подумал, было бы очень удобно, если ваша библиотека поддерживала эту фишку.
Потому, что сейчас библиотека EncButton не совсем точно интегрируется с esp32.
from encbutton.
Это библиотека энкодера от esp32, там же написано rotary_encoder.h
. Encbutton не будет совмещаться с другими библиотеками и от них зависеть, это не имеет смысла. Encbutton замечательно аппаратно интегрируется с любой платформой на уровне прерываний, потому что функция опроса помещается в обработчик прерывания
from encbutton.
Related Issues (20)
- Нет реакции на поворот энкодера на LGT8F328p HOT 3
- Конфликтует с библиотекой ArduinoJson HOT 2
- Проблема с энкодерами HOT 2
- Не работают прерывания, как следует на stm32 HOT 1
- Добавить поддержку энкодера HOT 18
- Не работает на Arduino Nano 33 BLE HOT 36
- Опрос кнопок в момент перезагрузки устройства HOT 5
- Проект на wokwi с кнопками EncButton HOT 61
- Migration from V2 to V3: tick() returns unreliable status HOT 5
- the 'eb.clear()' does not really set the encoder counter to 0 HOT 1
- Unusual step counting by rotary encoder HOT 5
- Многократное срабатывание виртуальной кнопки при однократном нажатии кнопки HOT 3
- fast() всегда false
- Ke-040 и 74hc165 HOT 9
- Совместимость с ESP8266 (Wemos D1 Mini) HOT 4
- Передать аргументы в событие. HOT 9
- 3.5.1 Won't compile HOT 1
- Описка в README HOT 1
- Внутрення подтяжка пинов INPUT_PULLUP HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from encbutton.