Как использовать цикл while(1) в arduino?

Я пытался выйти из цикла while(1), получив значение от датчика, а затем запустив код вне while(1).Но проблема в том, что он не выходит. Как я могу решить эту проблему?

Смотрите Код ниже ........

void setup() {
    pinMode(2,INPUT);
    Serial.begin(9600);
}

void loop() {
    int sensor;
    while(1)
    {
        sensor = digitalRead(2);
        if(sensor == 0)
        {
            Serial.println("inside while loop");
        }
        break;
    }
    Serial.println("Break......");
}

, 👍-2

Обсуждение

Цикл while (1) выполняется один раз, каждый раз, когда вызывается loop (), печатается или нет, в зависимости от состояния pin2. Я бы ожидал, что этот код будет печатать: либо "внутри цикла while" (если вывод 2 равен false), либо ничего, за чем следует "Break ......"; снова и снова. Это то, что ты получаешь? Ваш вопрос является неполным. Пожалуйста, опишите, что вы ожидали увидеть и что вы видите на терминале., @JRobert

Функция loop зацикливается (вызывается повторно). Почему вы помещаете неопределенный цикл внутри функции, которая вызывается бесконечно?, @Nick Gammon


3 ответа


6

В парадигме Arduino, в отличие от обычного программирования на C, где есть только 1 точка входа, называемая "main ()", есть 2 точки входа, называемые "setup ()" и "loop ()". "setup ()" вызывается только один раз после загрузки. Но "loop ()" вызывается снова и снова сразу после вызова "setup ()". Нет необходимости создавать свой собственный бесконечный цикл (например, оператор "while (1)"), как в обычном программировании на языке Си.

,

Есть ли в любом случае выход из цикла while(1) внутри цикла void(), @Uttam

Извините за задержку, каникулы. Да, но большинство не считает это хорошим программированием. Вы можете выполнить "разрыв" внутри цикла и выйти из цикла. [Этот вопрос / ответ на Stackexchange] (http://stackoverflow.com/questions/29485340/how-to-exit-while1-loop-after-sometime-in-c ) вдается в подробности., @st2000


1

вместо while(1) можно использовать имя переменной в while и изменять значение переменной, когда вы хотите выйти из цикла. часть кода может быть изменена на основе следующей концепции. условие bool= true; в то время как(условие){ если (датчик==0) условие=false; Это мое предложение для решения вышеуказанной проблемы.

,

1

Используется вот так

void setup() {
    pinMode(2,INPUT);
    Serial.begin(9600);
}

void loop() {
     bool cond = true;

int sensor;
while(cond)
{
    sensor = digitalRead(2);
    if(sensor == 0)
    {
        Serial.println("inside while loop");
    }
    cond = false;
}

  // таким образом, вы можете использовать его внутри цикла void()

}
,

Не могли бы вы, пожалуйста, добавить некоторые пояснения о том, как это решает проблему., @sa_leinad