Всем привет. В ходе создания проекта нужен был простой и многофункциональный таймер для решения задач. Выбор пал на библиотеку GyverTimer.h (автор Alex Gyver).
Скетч работает очень хорошо. Меня устраивает, но создано несколько таймеров. Время задержки я меняю в глобальных переменных для каждого таймера, но мне нужно это делать через меню.
Таймер при этом работает только со значением например long timer=1000; и не работает (не выполняется действие) когда long timer =0;. Значение задержки которое я меняю в меню таймер игнорирует и использует только значение глобальной переменной.
Возможно описал не понятно, сорри, с ардуино работаю несколько месяцев, с глобальными и локальными переменными вроде разобрался, но не знаю как поступить в этом случае. Прилагаю часть скетч ниже.
#include <GyverTimer.h>
#define upPin 49 // увеличение значения +
#define downPin 51 // уменьшение значения -
boolean buttonupWasUp = true;
boolean buttondownWasUp = true;
long timer1; // время задержки
GTimer myTimer(MS,timer1); //создаем милисекундный таймер
void setup() {
pinMode(upPin, INPUT_PULLUP);
pinMode(downPin, INPUT_PULLUP);
}
void loop() {
boolean buttonupIsUp = digitalRead(upPin);
boolean buttondownIsUp = digitalRead(downPin);
//------------------------------------------------------------------ отработка нажатия +
if (buttonupWasUp && !buttonupIsUp)
{
buttonupIsUp = digitalRead(upPin);
if (!buttonupIsUp && millis() - last_press > 50)
{
if (timer1 < 25000)
{
timer1 = timer1 + 100;
last_press = millis ();
}
}
}
//------------------------------------------------------------------ отработка нажатия -
if (buttondownWasUp && !buttondownIsUp)
{
buttondownIsUp = digitalRead(downPin);
if (!buttondownIsUp && millis() - last_press > 50)
{
if (timer1 > 0)
{
timer1 = timer1 - 100;
last_press = millis ();
}
}
}