Разработка библиотеки

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

BOOM пишет:

И не парюсь уже пару лет. ))


Не с кем, или возраст взял своё? ;-)))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

BOOM пишет:

https://github.com/kakmyc-github/kakmyc_btn

И не парюсь уже пару лет. ))

Девушка делает свое, весьма похвальное стремление ))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

чтение цифрового пина.  Если ВСЕ 16 попыток показали одно и то же (Активный уровень), кнопка нажата, иначе нет.  За годы - ни одного ложного срабатывания, забыл я про дребезг напрочь. 

protected:
	static constexpr uint8_t NUM_ATTEMPTS = 16;

	static bool ReadDigitalPin(const uint8_t APin, const bool AActiveLevel) {
		for (uint8_t i = 0; i < NUM_ATTEMPTS; ++i) {
			if (digitalRead(APin) != AActiveLevel) return false;
		}
		return true;
	}

надежность сохраняется при уменьшении попыток до 10, потом надо ставить delay(1) после каждого чтения.  Для себя я 16 оставил, мне не к спеху кнопку опрашивать.  :) 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

чтение цифрового пина.  Если ВСЕ 16 попыток показали одно и то же (Активный уровень), кнопка нажата, иначе нет.  За годы - ни одного ложного срабатывания, забыл я про дребезг напрочь. 

существует 99 способов )))

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Задумалась

bool Buttons::pressing() {
  bool pinstat = digitalRead(_pin);
  bool stat_ret = false;

  switch (_stat) {
    
    case 0x00:
      if (pinstat)_stat = 0x01;
      break;

    case 0x01:
      if (!pinstat ) {
        _tmr = millis();
        _stat = 0x02;
      }
      break;

    case 0x02:
      if (!pinstat) {
        if (millis() - _tmr >= _retention_time) {
          _stat = 0x00;
          stat_ret = true;
        }
      } else {
        _tmr = millis();
      }
      break;
  }
  return stat_ret;
};

25 строчка кода _tmr = millis();

Или в этот момент возвращаться на проверку

  case 0x00:
      if (pinstat)_stat = 0x01;
      break;

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Веселая блок-схема )))

Это чтобы запутать врага или самой запутаться?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Я на прошлой странице приводил примерный алгоритм, вот по нему блок-схема

Это должно крутиться в лупе чем чаще, тем лучше ))

Возвращает три состояния:

BTN_UP - кнопка только что отпущена
BTN_DOWN - кнопка только что нажата
BTN_LONGPRESS - кнопка удерживается нажатой

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

сразу видно мальчик составлял, ДА в два раза чаще чем НЕТ )))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

))))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А я что-то вообще таких схем не понимаю: куда идти, если "нет"?

Вообще, условный оператор с единственным выходом - это нонсенс.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Никуда не идти. Если условие не выполнилось, работа функции завершается.

Понятно, что по фэншую надо все в конец сводить, но по мне эта мешанина линий только мешается ))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

v258 пишет:
Понятно, что по фэншую надо все в конец сводить

Я только ЗА!!! ;-)

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

ua6em пишет:

v258 пишет:
Понятно, что по фэншую надо все в конец сводить

Я только ЗА!!! ;-)


Седина в бороду, бес - в конец? )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

v258 пишет:
Никуда не идти. Если условие не выполнилось, работа функции завершается.
Завершается чем? 

HALT?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

andriano пишет:

v258 пишет:
Никуда не идти. Если условие не выполнилось, работа функции завершается.
Завершается чем? 

HALT?


Это блок-схема функции, а не программы. Дальше идет возврат в точку, следующую за вызовом функции.

Алгоритм примерный. Зависит от конечной цели: если нужно, чтобы функция обязательно что-то возвращала, то нужно дописать пару строк, а если по итогу нужно просто флаги выставлять, то больше ничего не нужно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну то есть функция может по желанию - иногда что-то возвращать, а иногда - нет?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

andriano пишет:

Ну то есть функция может по желанию - иногда что-то возвращать, а иногда - нет?


Да. Зависит от замысла разработчика. Нужно, чтобы возвращала - будет возвращать. Не нужно - не будет. Что непонятного в словах "это примерный алгоритм"? ;)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Алгоритмов примерных не бывает. 

Бывает либо алгоритм, либо - нет.

Цитата:
Алгори́тм — конечная совокупность точно заданных правил решения некоторого класса задач или набор инструкций, описывающих порядок действий исполнителя для решения определённой задачи.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

andriano пишет:

Алгоритмов примерных не бывает. 

Да, да, и условный оператор с одним выходом - нонсенс. К чему этот троллинг? Вечер не задался?