boolean GTimer_ms::isReady() {
if (!_state) return false;
if ((long)millis() < _timer) {_timer = millis();}
if ((long)millis() - _timer >= _interval) {
if (_mode) _timer = millis();
return true;
} else {
return false;
}
}
Мгм , требующие подтверждения!, дабы лишнего неправильного не городитьмысли в слух
Потому что само нажатие кнопки к таймеру никакого логического отношения не имеет. Но если надо несколько таких таймеров, каждый который будет следить за отдельной щелью (кнопкой), то имеет смысл написать наследный класс от таймера, тут да. Все упирается в "стоит ли городить класс для удобства, если это надо разово"А почему бы не сделать переменную для запоминания членом класса? в public например, чтоб при создании объекта GTimer у него была своя переменная, т.к. на данном этапе уже 2 таймера объявлено..
#include "GyverTimer.h"
GTimer_ms myTimer; // создать таймер
void setup() {
Serial.begin(9600);
// myTimer.setInterval(500); // настроить интервал
Serial.println("start Timer!");
}
void loop() {
myTimer.setInterval(500);
//myTimer.reset();
//myTimer.start();
if (myTimer.isReady()) Serial.println("Timer!");
//
}
А кто говорил про использование прерывания? )))да ну, прерывание на него тратить, ногу лишнюю использовать)
за советы и внимание- спасибо!!
смотря как ты программу организуешь.. тут я у тебя не вижу мега цикла на тыщу строк )))должен быть идеальный мир, должен! в котором события происходят в тот момент, когда программа готова их обработать) в нашем же, обычном мире, программа может, например, сидеть в долгом цикле и пользователь может хоть обкрутиться энкодером, но без всякого результата.
то есть хочу сказать, что не представляю как без использования внешнего прерывания правильно обработать вращение энкодера
#include <GyverTimer.h>
#include <GyverTM1637.h>
#define CLK 6
#define DIO 7
GyverTM1637 Disp(CLK, DIO);
GyverTimer PageTimer(MS);
void setup{
PageTimer.setTimeout(2000); //устанавливаем
}
void loop{
if(PageTimer.isEnabled()){ //пока таймер работает(возвращает "true"), показываем надпись StEP
Disp.displayByte(_S, _t, _E, _P);
}else{ //теперь когда отсчитали время, статус таймера должен вернуть "false"
Disp.displayInt((int)stepper2.currentPosition()); // теперь показываем на каком шаге стоит шаговик ( 28BYJ-48)
}
}