Нужна помощь по циклу while

Timur007
Offline
Зарегистрирован: 17.05.2015

Есть вот такой код простой код


unsigned long time = 0;

void setup() {

Serial.begin(9600);  

}

void loop() {
  
 while (millis() < time);  

 time += 1000;

 Serial.println(time); 

}

Изменяя значение константы (сейчас стоит 1000) , можно регулировать скорость выполнения программы. Как это происходит. Видимо есть какие-то тонкости которых я пока не знаю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет здесь никаких тонкостей - всё очень толсто и очевидно. Почитайте что такое while и что он делает - http://arduino.ru/Reference/While

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Тонкость в том, что вы упустили фигурные скобки в функции while.
Вот как должно быть:

while (millis() < time)
  {
     // тут что-то делаем до тех пор, пока time не станет больше millis
  } 

Так понятнее? Эти скобки необязательные, если цикл while нужен только для того, чтобы контроллер "тупо тупил и бил баклуши" некоторое время. Т.е.  в данном случае это аналог delay(1000), но в котором можно во время паузы что-то делать.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ничего он не упустил. Там крутится пустой цикл - полная имитация delay(1000) без возможности что-то делать еще.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

так и я про то же. Просто в изначально приведенном синтаксисе новичкам не понятно почему не сразу идет переход с 11 на 13 строку.

А возможность "что-то делать еще" как раз будет, если использовать скобки.