Приветствую, парни, я новичок, написал код управления скоростью вентилятора одной кнопкой переключая режимы, так вот потребовалось добавить функцию чтобы счетчик переключения режимов сбрасывался на 0 через 10 секунд ventMode = 0, но в таком варианте как у меня получилось отсчет времени стартует с самого первого нажатия кнопки (vent.isPress()) , а мне нужно чтобы отсчет времени стартовал с последнего нажатия кнопки если не прошло еще 10 сек с момента предыдущего нажатия. То есть нажал первый раз кнопку - скорость вентилятора 25%, прошло 1 сек нажал еще раз - второй режим 50%, допустим меня такая скорость устраивает и я так и оставляю, так вот надо чтобы счетчик десяти секунд запустился на первом нажатии, но из-за второго нажатия сбросился и снова стартовал отсчет 10 сек и уже по прошествии 10сек с момента последнего (второго) нажатия счетчик режимов ventMode сбросился на 0, то есть если уже при этом нажать кнопку, то скорость переключится не на 75% как по списку, а снова на 25%.
C++:
#include "GyverButton.h" /// https://github.com/AlexGyver/GyverLibs/releases/download/GyverButton/GyverButton.zip
GButton vent;
unsigned long timer;
byte ventMode = 0;
void ventSpeed()
{
switch (ventMode)
{
case 0:Serial.println("0%");break;
case 1:Serial.println("25%");break;
case 2:Serial.println("50%");break;
case 3:Serial.println("75%");break;
case 4:Serial.println("100%");break;
}
}
void setup() {
Serial.begin(115200);
timer = millis();
}
void loop() {
int analog = analogRead(7);
vent.tick(analog < 695 && analog > 652); //6
if (vent.isClick()) {
ventMode++;
if (ventMode > 4)
ventMode = 0;
ventSpeed();
}
if (vent.isPress()) {
if (millis() - timer > 10000)
{
ventMode = 0;
timer = millis();
}
}
}