ARDUINO Сброс и старт счетчика по последнему нажатию кнопки

martinways

✩✩✩✩✩✩✩
23 Дек 2020
25
0
Приветствую, парни, обычная ситуация - я новичок, в C++ не шурупаю))
Выдирая куски кода из чужих скетчей, примеров и дописывая по логике свои команды написал код управления скоростью вентилятора одной кнопкой переключая режимы, так вот потребовалось добавить функцию чтобы счетчик переключения режимов сбрасывался на 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();
    }
    }
}
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
При нажатии кнопки, запоминай текущее время. А в лупе проверяй, не прошло ли больше 10с с того времени.