Проблема в 4-х строках

andrey14
Offline
Зарегистрирован: 19.04.2015

Здравствуйте! Столкнулся с непонятной проблемой. Или меня заклинило или... В общем, помогите пожалуйста разобраться, почему переменная delta растет?



#include <LiquidCrystal.h>

unsigned long moved=0,delta=0,time=0;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);// set up the LCD's number of columns and rows
}

void loop() {
  time=millis();
  if (delta<(time-moved))
  {
    delta=time-moved;
    moved=time;
  }
  Serial.print(delta);
  Serial.print(" ");
  Serial.println(time);
  lcd.setCursor(0, 0); lcd.print(delta);
}

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Ответ соответствует условию задачи (которого нет): потому что этому способствует условие в строке 14.

Даже если рассуждать не зная условие задачи (а это так и есть), то, например, чем реже мы выполняем строки 16-17, тем больше растет разница между time & moved. Здесь нужно либо вынести moved=time из условия, либо что то, что известно только Вам.

 

andrey14
Offline
Зарегистрирован: 19.04.2015

Решено:

	  time=millis();
	  if (delta<(time-moved))
{
	    delta=time-moved;
}
	    moved=time;

 

andrey14
Offline
Зарегистрирован: 19.04.2015

kisoft пишет:

Здесь нужно либо вынести moved=time из условия, либо что то, что известно только Вам.

Но Вы уловили условие даже без него. Спасибо.

Додумал сам %) Задача была в засекании времени. Не понимал, почему на один и тот же цикл время растет. Заклинило не слабо.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В этом варианте - измерение максимальной длительности цикла.

Бывает, всех клинит, хоть профессор, хоть студент.