2015-02-19 2 views
0

У меня возникла странная проблема, и я не могу понять, что я делаю неправильно ... Должно быть что-то!Значение переменной не поддерживается во время цикла

Я объясню это коротко ... Я разрабатываю платформу Arduino (насколько я знаю, это сильно основано на C++), и в разделе моего фактического кода у меня есть цикл while ...

Итак, где проблема?

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

Вот оно:

void waitResponse(char* text) { 
    static bool flag = false; 
    count = 0; 
    digitalWrite(GREEN_PIN, HIGH); //Turn OFF Green LED 
    while (!espSerial.available()) { //Wait until we get some data in... 
     Serial.println("No data"); 
     notBlockingBlink(); 
    } 
    while (!flag) { //We got sth 
     Serial.print("Flag value 1: "); 
     Serial.println(flag); 
     while (espSerial.available()) { 
      Serial.println("In"); 
      if (search(text)) { 
       flag = true; 
       Serial.println("Found"); 
       Serial.print("Flag value 2: "); 
       Serial.println(flag); 
       break; 
      } else { 
       notBlockingBlink(); 
      } 
     } 
     Serial.print("Flag value 3: "); 
     Serial.println(flag); 
     notBlockingBlink(); 
    } 
} 

Я пытался отладить мой вопрос ...

После ввода, если блок, где есть «Найдено», флаг получает значение истинной, на самом деле "значение флага 2: "является правда так же, как" значение флага 3:», но на следующей итерации "значение флага 1:" на самом деле ложь ...

Что случилось ? Пожалуйста, просветите меня! Спасибо

+0

_ «Я попытался отладить мою проблему ...» _ Очевидно, что это недостаточно серьезно. –

+0

Что делает 'notBlockingBlink();' do? – NathanOliver

+0

@NathanOliver Это делает светодиод мигающим, но я думаю, что это не имеет значения ... –

ответ

1

Поскольку ваше условие для цикла while равно !flag, логически нет возможности иметь итерацию, где flag - это правда. Поэтому поведение, которое вы верите должно Быть может не.

+0

Хорошо ... Я так и думал, и я действительно смутился, когда это произошло ... Переменная, похоже, сама перезагружается –

+1

Ваша функция называется второй раз. Переменная на самом деле локальна для функции, поэтому она не сбрасывается, она просто объявляется во второй раз (и инициализируется ложь). – rainbowgoblin

+0

Я считаю, что он должен выйти из цикла ... Но это не так ... Это вопрос –

Смежные вопросы