Функция Millis() Arduino

Я хотел бы сделать обратный отсчет с помощью Arduino. Для этого я использую функцию millis(), но у меня возникла проблема: я не могу ее сбросить. Читая в интернете я прочитал, что это сделать невозможно. Так как же мне найти альтернативу этому? На практике, когда я нажимал кнопку, я начинал обратный отсчет, а когда возвращал ее на место, я переходил в режим паузы.


void inizio(){
  Serial.println("INIZIO");

  currentMillis1_general = millis();
  total_1 = currentMillis1_general - currentMillis_general;
  Serial.println(total_1);

  buttonState = digitalRead(buttonPin);
  if(buttonState == HIGH){
    step_funzione = 1;
    delay(200);
  }
}

void countdown(){
  Serial.println("COUNTDOWN");

  display.setBrightness(7);

  currentMillis_general = millis();
  total_general = currentMillis_general - total_1;

  if(total_general - previousMillis_general >= interval_general){
    previousMillis_general += interval_general; 
    //previousMillis_general = currentMillis_general;
    m = new_tempo/60;
    s = new_tempo%60;
    new_tempo--;
  }

  display.showNumberDec(m, true,2,0);
  display.showNumberDec(s, true,2,2);

  Serial.println(total_general);

  buttonState = digitalRead(buttonPin);
  if(buttonState == HIGH){
    step_funzione = 0;
    delay(200);
  }
}

, 👍0


1 ответ


1

Способ выполнить «Сброс» — снова установить начальное значение равным millis(). Чтобы сделать эквивалент «Паузы», вам нужен счетчик пауз. Когда вы начинаете паузу, сохраните millis() в pauseTime. Когда вы снова возобновите работу, добавьте millis() - pauseTime к вашему pauseCounter. Тогда ваш интервал не должен истечь до тех пор, пока millis() - pauseCounter > Interval).

,