Code Monkey home page Code Monkey logo

Comments (8)

GyverLibs avatar GyverLibs commented on July 18, 2024 1

сделали поддержку энкодера, назвали ее PCINT

PCINT это обычные прерывания с пина, к энкодеру это никакого отношения не имеет... Библиотека изначально сделана универсальной для работы с прерываниями на любых платформах, в прерывании нужно вызвать специальный тикер, см примеры. К слову PCINT есть и у МК AVR

from encbutton.

brightproject avatar brightproject commented on July 18, 2024

Если можно, то в класс кнопки class Button : public VirtButton {}
добавить чтение в секции setup(){} с дебонсом, что то наподобие этого

https://github.com/m5stack/M5Stack/blob/fc1e5a78d764aadc4c57e525e45f42dbe95f41bb/src/utility/Button.cpp#L52

    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.

GyverLibs avatar GyverLibs commented on July 18, 2024

Нет, это ерунда какая то. Опять же чтобы подобный код работал - его нужно вызывать циклично, в сетап это не будет работать

from encbutton.

GyverLibs avatar GyverLibs commented on July 18, 2024

Если по каким то причинам нужно именно остаться в сетап, без примера с флагом как я писал ранее, то можно воспользоваться состоянием busy и погрузиться в цикл

void setup() {
  do {
    btn.tick();
    if (btn.hold()) foo();
  } while (btn.busy());
}

Не тестировал, но должно работать

from encbutton.

GyverLibs avatar GyverLibs commented on July 18, 2024

Есть нужно две и более кнопок затащить в обработку при старте - соответственно

while (b1.busy() || b2.busy() || b3.busy());

from encbutton.

brightproject avatar brightproject commented on July 18, 2024

Нет, это ерунда какая то. Опять же чтобы подобный код работал - его нужно вызывать циклично, в сетап это не будет работать

Вы как адепт ардуино, все же создали многие библиотеки "универсальными", работающими и с другими МК.
Сейчас популярные чипы для "самоделок" это esp32-s3 и teensy 4.1
Используя вашу библиотеку, еще версии 2, столкнулся с тем, что на esp32 она работала не совсем так как надо, особенно с энкодерами.
Стал разбираться, и оказалось, разработчики esp32 аппаратно сделали поддержку энкодера, назвали ее PCINT - то есть прерывания аппаратные.
Вы не думали реализовать поддержку PCINT в своей библиотеке?

from encbutton.

brightproject avatar brightproject commented on July 18, 2024

сделали поддержку энкодера, назвали ее PCINT

PCINT это обычные прерывания с пина, к энкодеру это никакого отношения не имеет... Библиотека изначально сделана универсальной для работы с прерываниями на любых платформах, в прерывании нужно вызвать специальный тикер, см примеры. К слову PCINT есть и у МК AVR

Да вот у espressif это вроде какая то "своя" реализация на аппаратном уровне.
И с ней работать только используя esp-idf, но чтобы сторонние библиотеки это использовали - я не встречал.
Поэтому подумал, было бы очень удобно, если ваша библиотека поддерживала эту фишку.
Потому, что сейчас библиотека EncButton не совсем точно интегрируется с esp32.

from encbutton.

GyverLibs avatar GyverLibs commented on July 18, 2024

Это библиотека энкодера от esp32, там же написано rotary_encoder.h. Encbutton не будет совмещаться с другими библиотеками и от них зависеть, это не имеет смысла. Encbutton замечательно аппаратно интегрируется с любой платформой на уровне прерываний, потому что функция опроса помещается в обработчик прерывания

from encbutton.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.