Code Monkey home page Code Monkey logo

Comments (5)

GyverLibs avatar GyverLibs commented on August 17, 2024 1

btn.tick(); нужно вызывать циклично, так как в нём происходит обработка кнопки с учётом дребезга контактов и прочих таймаутов. Если нужно проверить уровень кнопки при запуске - достаточно использовать

  • Button/ButtonT: bool read(); // прочитать текущее значение кнопки
  • EncButton/EncButtonT: bool readBtn(); // прочитать текущее значение кнопки

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

Всё верно! Чтение кнопки производится с учётом настроенного уровня кнопки:

    bool read() {
        return EBread(pin) ^ read_bf(EB_INV);
    }

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

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

Например так

bool flag = 1;

void loop() {
  btn.tick();

  if (flag) {
    if (btn.press()) foo();
    // flag = 0; // перейти к другой логике
  } else {
    if (btn.press()) bar();
  }
}

Это называется конечный автомат, или более понятно "режимы работы". Вместо глухого кода в сетап лучше перейти в главный цикл с условиями и свитчами

from encbutton.

brightproject avatar brightproject commented on August 17, 2024
  • Button/ButtonT: bool read(); // прочитать текущее значение кнопки
  • EncButton/EncButtonT: bool readBtn(); // прочитать текущее значение кнопки

Благодарю, я спасен!

void setup() {
btn_right.setButtonLevel(HIGH);
    Serial.begin(115200);
    if (btn_left.read()) {
        Serial.println("Левая удержана при перезагрузке");
    }
    if (btn_right.read()) {
        Serial.println("Правая удержана при перезагрузке");
    }
}

Скриншот 23-08-2023 18 02 35

Причем, хоть и опроса в цикле btn.tick() нет, setButtonLevel выполняется отлично.
У меня левая кнопка с подтяжкой к 3.3 в, а правая к земле.
Скриншот 23-08-2023 18 04 51
Поэтому нужно инвертировать логику.

from encbutton.

brightproject avatar brightproject commented on August 17, 2024

Всё верно! Чтение кнопки производится с учётом настроенного уровня кнопки:

    bool read() {
        return EBread(pin) ^ read_bf(EB_INV);
    }

Все хорошо, @GyverLibs но мне очень не хватает debounce в секции setup(){}
Инициализирую кнопку так
Button btn_left(39, INPUT);// внешняя подтяжка
И применяю для экранной клавиатуры
photo1692874157

setup(){
      if (btn_left.read()) 
	  {
        rsel++;
        if (rsel >= ROWS) rsel = 0;
      }

      if (btn_right.read()) 
	  {
        csel++;
        if (csel >= COLS) csel = 0;
      }
}

Переменные rsel и cselпочти всегда увеличиваются на 2(два) значения, видимо кнопка определяет нажатие и при НАЖАТИИ и при ОТПУСКАНИИ.
Можно, что то придумать, или именно с этой библиотекой применение без tick() в бесконечном цикле - неполноценно?

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.