Переменная добавляется сама собой

sergkr1983
Offline
Зарегистрирован: 09.12.2015

Вот отрывок кода:

void UstanovkaVremeni1(){

lcd.createChar(1, bukva_D);
lcd.createChar(0, bukva_I);
lcd.createChar(2, bukva_Ya);
lcd.createChar(3, UV);

//lcd.createChar(3, UV);
//lcd.setCursor(8,2);
//lcd.write(3);

lcd.setCursor(3,0);
lcd.print("BBE");lcd.write(1);lcd.write(0);lcd.print("TE BPEM");lcd.write(2);lcd.print(":");
lcd.setCursor(10,2);lcd.print(":");
lcd.setCursor(7,2);lcd.write(3);
lcd.setCursor(8,2);lcd.print(time1);
lcd.setCursor(11,2);lcd.print(time2);

if ( irrecv.decode( &results )) { // если данные пришли
      Serial.println( results.value ); // печатаем данные
            }

           switch (results.value) {
           case EQ:
              lcd.clear();
              irrecv.resume();
              
              break;
           break;

           case VolPlus:
              ++time1;
              lcd.setCursor(8,2);
              lcd.print(time1);
              VRY = 0;
              //delay(1000);
              Serial.available();
              irrecv.resume();
              //
              UstanovkaVremeni1();
              
           break;

           case VolMinus:
              --time1;
              lcd.setCursor(8,2);
              lcd.print(time1);
              VRY = 0;
              irrecv.resume();
              //delay(1000);
              UstanovkaVremeni1();
              
           break;

           default:
              irrecv.resume();
              VRY++;
              if (VRY == 10) {
                VRY = 0;
                lcd.clear();
                break;
              }
              delay(1000);
              UstanovkaVremeni1();
              
           }
           irrecv.resume();


//delay(1000);
//UstanovkaVremeni1();
  
}

По идее при нажатии на пульте "+" переменная time1 должна добавить единицу и ждать опять нажатия на пульт, но она не останавливатся и добавлятся постоянно. Не пойму почему? Может что-то вы (уважаемые форумчане) подскажите? Спасибо.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В строке 40 рекурсивный вызов. В других местах тоже рекурсивный вызов.

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

sergkr1983 пишет:

По идее при нажатии на пульте "+" переменная time1 должна добавить единицу и ждать опять нажатия на пульт

Не-а.

По идее, после нажатия любой кнопки на пульте, кнопка должна начать обрабатываться, а потом обрабатываться постоянно с частотой вызова loop() до тех пор, пока не будет нажата другая кнопка. Тогда другая начнёт также постоянно обрабатываться с частотой вызова loop().

По крайней мере, программа написана именно так.

Возможно, Вы хотели поставить } не в 21-ой строке, а в 68-ой? Но поставили почему-то именно в 21-ой :(

Я уж молчу про многократные вызовы resume и про рекурсию.