Ребят, в чем проблема? Надо чтобы выводилось "STOP" пока расстояние <= 7. Но почему-то программа не выходит из цикла, после увеличения расстояния. Код (C++): byte trig = 18, echo = 19; int cm, duration; void setup() { Serial.begin(9600); activate(); Serial.println("START"); } void loop() { delay(10000); } int count(byte trig, byte echo){ digitalWrite(trig, LOW); delayMicroseconds(5); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); pinMode(echo, INPUT); duration = pulseIn(echo, HIGH); cm = (duration/2) / 29.1; return cm; } void activate(){ unsigned short int distance = count(trig, echo); while(distance <= 7) { Serial.println(distance); unsigned short int distance = count(trig, echo); delay(100); Serial.println("STOP"); } }
Ну как написано, так, наверное, и выполняется: Код (C++): void activate(){ unsigned short int distance = count(trig, echo); while(distance <= 7) { Serial.println(distance); unsigned short int distance = count(trig, echo); delay(100); Serial.println("STOP"); } } Расстояние у Вас измеряется один раз, потом Вы крутитесь в цикле, если расстояние <= 7. Перенесите опрос состояния: Код (C++): distance = count(trig, echo); в цикл, и будет Вам счастье
Посмотрел внимательней, Просто поменяйте в цикле: Код (C++): while(distance <= 7) { Serial.println(distance); unsigned short int distance = count(trig, echo); delay(100); Serial.println("STOP"); } на: Код (C++): while(distance <= 7) { Serial.println(distance); distance = count(trig, echo); delay(100); } Serial.println("STOP"); А то Вы заводите новую локальную переменную, которая не проверяется в условии цикла И еще перенесите: Код (C++): Serial.println("STOP"); за цикл. Хотя в вопросе: тогда оставляем в цикле.
А еще проще так: Код (C++): void activate() { unsigned short int distance; do { distance = count(trig, echo); Serial.println(distance); delay(100); Serial.println("STOP"); } while(distance <= 7); }
народ, все что вы советуете - не поможет ТС. Он же пишет "программа не выходит из цикла, после увеличения расстояния." То есть, насколько я понял - ему надо, чтобы в какой-то момент расстояние сначала было больше 7, а когда снизится ниже этого порога - выводился "СТОП". Поправьте меня, но не один из предложенных кусков кода так работать не будет. Или если я неправильно понял задачу - пусть ТС пояснит.