Аномалия с millis()

meridbt
Offline
Зарегистрирован: 16.08.2017

Здравствуйте, уважаемое сообщество!

Прошу помочь разобраться с аномалией, возникающей в простой программе.

В учебных целях создал скетч, который в цикле проверяет время между событиями и при разнице времени больше заданной выводит время работы контроллера в консоль. 

Аномалия заключается в том, что если я закрываю консоль и открываю её снова, время отсчитывается опять с нуля. 

На "скорость" в принципе не влияет, но хочется понять ЧЯДНТ. 

int thetime;
int newtime;
int interval = 5000;
bool loop1Enabled;

void TimePrint()
{
int time = millis()/1000;
if (time/60/60<10) { Serial.print ("0"); }
Serial.print (time/60/60);
Serial.print (":");
if (time/60%60<10) { Serial.print ("0"); }
Serial.print ((time/60)%60);
Serial.print (":");
if (time%60<10) { Serial.print ("0"); }
Serial.println (time%60);
}

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
loop1Enabled = true;
thetime = 0;
newtime = 0;
}

void loop() {
  // put your main code here, to run repeatedly:
  int inData = 0;
  if (Serial.available() > 0)
  {
    inData = Serial.read(); 
  }
  switch (inData)
  {
    case 0: // nothing pressed
    {
      break;
    }
    case 104: // button h pressed
    {
      Serial.println("1 - Start/Stop Loop1");
      Serial.println("h - List of available commands");
      break;
    }
    case 49: // button 1 pressed
    {
      if (loop1Enabled)
      {
        loop1Enabled = false;
        Serial.println("Loop 1 stopped. To start it again press 1");
      }
      else
      {
        loop1Enabled = true;
        Serial.println("Loop 1 started. To stop it again press 1");
      }
      break;
    }
    default:
    {
      Serial.println(inData);
      break;
    }
  }
  if (loop1Enabled)
  {  
    newtime = millis();
    if ((newtime - thetime) > interval)
    {
      thetime = millis();
      TimePrint();
    }
  }
}

 

negavoid
Offline
Зарегистрирован: 09.07.2016
Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Каждое новое открытие окна Serial Monitor посылает в порт сигнал DTR, это приводит к сбросу.

meridbt
Offline
Зарегистрирован: 16.08.2017

Спасибо

b707
Offline
Зарегистрирован: 26.05.2017

meridbt пишет:

Аномалия заключается в том, что если я закрываю консоль и открываю её снова, время отсчитывается опять с нуля.

При закрытии-открытии консоли происходит рестарт ардуины - вы этого не знали?

meridbt
Offline
Зарегистрирован: 16.08.2017

Не знал, я же только учусь