Аналог delay , но чтобы остальное работало

timur2008
Offline
Зарегистрирован: 06.03.2013

Здравствуйте. Подскажите пожалуйста как сделать задержку секунды на три. Вообщем у меня робот отъехал от препятствия на некоторое расстояние и после этого должен остановиться секунды на три, вот как реализовать условие для остановки на три секунды ?? 

step962
Offline
Зарегистрирован: 23.05.2011

timur2008 пишет:

Здравствуйте. Подскажите пожалуйста как сделать задержку секунды на три. Вообщем у меня робот отъехал от препятствия на некоторое расстояние и после этого должен остановиться секунды на три, вот как реализовать условие для остановки на три секунды ?? 

Точно так же, как и в жизни. Вы яйцо когда-нибудь варили?

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

Как в микроконтроллере время отслеживается? millis() или micros() - в зависимости от требуемой точности и длины измеряемого интервала времени.

timur2008
Offline
Зарегистрирован: 06.03.2013

Я это понимаю, но блин я чтото туплю и до меня не доходит всеравно :( 

Конструкция

if( miilisec() - interval ==3000) 
  {
..........

  }

 

Чтото не работает и я не могу понять чтото как правильно тут сделать :( 
Мне нужно чтобы каждый раз робот останавливался как только отъедет от препятствия.
step962
Offline
Зарегистрирован: 23.05.2011

Ну а если чуть подумать - обязательно ли стрелять вороне точно в глаз? Ведь это не белка и шкурку с нее не сдерешь...

Попробуйте вот так:

if(millis() - interval >= 3000)

Может быть, результат вам понравится.

Несмотря на то, что в глаз так и не попали.

timur2008
Offline
Зарегистрирован: 06.03.2013

Просто тут то одна вещь до меня не доходит никак , будет ли это условие выполняться каждый раз , или оно только один раз выполниться ? 

 

 

ладно попробую вечером да узнаю :)

timur2008
Offline
Зарегистрирован: 06.03.2013

Ааа все допер , там нужно сделать было 

также как в примере 

// здесь будет код, который будет работать постоянно
  // и который не должен останавливаться на время между переключениями свето
  unsigned long currentMillis = millis();
  
  //проверяем не прошел ли нужный интервал, если прошел то
  if(currentMillis - previousMillis > interval) {
    // сохраняем время последнего переключения
    previousMillis = currentMillis; 
   останавливаем робота
  }

 

step962
Offline
Зарегистрирован: 23.05.2011

timur2008 пишет:

Просто тут то одна вещь до меня не доходит никак , будет ли это условие выполняться каждый раз , или оно только один раз выполниться ? 

Если надо, чтобы код при выполнении этого условия выполнялся всегда - ничего не делаем.

Если надо, чтобы код выполнился только один раз - дополнительно проверяем и сбрасываем в теле исполняемого кода какой-нибудь флажок (не забываем взводить его в соответствующих местах программы).

Если надо, чтобы код выполнился определенное количество раз - дополнительно проверяем и инкрементируем в теле исполняемого кода какой-нибудь счетчик (не забываем устанавливать его на начальное значение в соответствующих местах программы).

 

 

timur2008
Offline
Зарегистрирован: 06.03.2013

да спасибо понял, просто тут именно так нужно, флаги не помогут.

Zapek@n
Offline
Зарегистрирован: 16.02.2012
nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

>>if( miilisec() - interval ==3000)<<

Особенно "miilisec" порадовал. Скину в копилку афоризмов.

timur2008
Offline
Зарегистрирован: 06.03.2013

блин не проканывает:((