не могу понять TimerMS

SUPERNYAMSTER

✩✩✩✩✩✩✩
19 Дек 2020
27
1
задача:
есть две нагрузки(R1 и R2) необходимо их включить поочередно(R1=on...500ms...R2=on) нажатием одной кнопки. удержанием кнопки их выключить так же поочередно выключить.
C++:
#define PIN 8       
#include "GyverButton.h"
#include <TimerMs.h>
GButton butt1(PIN, LOW_PULL, NORM_OPEN);
TimerMs tmr(1000, 0, 1);

void setup() {
  Serial.begin(9600);
  tmr.setPeriodMode();
  butt1.setDebounce(50);       
  butt1.setTimeout(800);       
  butt1.setClickTimeout(600);   
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}

void loop() {
  butt1.tick();

  if (butt1.isSingle()){
  Serial.println("TOPOL_M_onStart");     
  digitalWrite(3, true);
  if (tmr.tick()) {
  Serial.println("SATANA_isReady");       
    digitalWrite(4, true);
}
  }
}
где то что то я не дописал. прст описание библиотеки ТаймерМС не могу понять.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Если у кнопки только одиночный клик, то лучше использовать isClick - оно сразу дает событие нажатия и отпускания. isSingle ждет возможного двойного , тройного нажатия.

Таймер лучше запускать на 1 раз, без повторов на 500мс по событию клик. соотв. если таймер сработал нужно включить (или выключить, если было удержание ) что то там на пине 4
 

SUPERNYAMSTER

✩✩✩✩✩✩✩
19 Дек 2020
27
1
нажатий там будет синг, дабл и холд. я просто для упрощения картины вырезал кусок кода.
и таймеров нужно тоже три. в одном нажатии будет два таймера. но даже один не могу запустить
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
В данном случае не вижу смысла в таймере. Периодичности тут нет. Тут 1 интервал.
Итого имеем.
Если было одиночное нажатие то:
1) Включит пин 3
2) Запомнить текущее время millis() в переменную №1
Если с момента времени нажатия прошло больше 499 мс, (millis()-переменная№1 >499) то включить пин 4.
Дополнительно я бы сравнвал переменную №1 с нулем. И если 0, то действий не требуется. Т.е. будет так:
Есои переменная не равна 0, то
Если прошло больше 499мс то включить пин 4 и переменной №1 присвоить 0.