IrRemote + Цикл

Slsvok47
Offline
Зарегистрирован: 03.06.2018

Ребята привет, столкнулся с такой проблемой, кнопками пульта нужно вызывать функции с циклами, и тут возникает проблема, если в цикле написать irrecv.resume(); то цикл остановится ожидая команды с пульта, без irrecv.resume(); цикл будет выполнятся, но тогда уже на команды пульта не будет реакции, подскажите как выйти из этого положения?

b707
Offline
Зарегистрирован: 26.05.2017

Выкладывайте код, без этого разговор ни о чем.

Slsvok47
Offline
Зарегистрирован: 03.06.2018

Ну например вот так,

void loop() {
  
  if (irrecv.decode(&results)) { 
    if(results.value == 16187647){
   test();
    }
    if(results.value == 16220287){
   test2();
    }
    irrecv.resume();
  }
  delay(1000);
}

void test(){
  while(1){
  Serial.println("Test");
 irrecv.resume();
 delay(1000);
  } 
} 

void test2(){
  Serial.println("Test2");
 irrecv.resume();
 delay(1000); 
}

Функции вызываются обе по нажатию кнопок, но на test2 не переключается если вызвана test, просто работает цикл, а если сначала вызвать test2, то на test переключается без проблем

SLKH
Offline
Зарегистрирован: 17.08.2015

Slsvok47 пишет:

Ну например вот так,

void loop() {
  
  if (irrecv.decode(&results)) { 
    if(results.value == 16187647){
   test();
    }
    if(results.value == 16220287){
   test2();
    }
    irrecv.resume();
  }
  delay(1000);
}

void test(){
  while(1){
  Serial.println("Test");
 irrecv.resume();
 delay(1000);
  } 
} 

void test2(){
  Serial.println("Test2");
 irrecv.resume();
 delay(1000); 
}

Функции вызываются обе по нажатию кнопок, но на test2 не переключается если вызвана test, просто работает цикл, а если сначала вызвать test2, то на test переключается без проблем

ну так из цикла в строках 16 - 20 вообще выход не предусмотрен. как однажды попал - так и будешь вертеться.

Slsvok47
Offline
Зарегистрирован: 03.06.2018

ну с выходом понятно, но почему пульт перестает отрабатываться, если в цикл добавить строку 

Serial.println(results.value);

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

SLKH
Offline
Зарегистрирован: 17.08.2015

Slsvok47 пишет:

ну с выходом понятно, но почему пульт перестает отрабатываться, если в цикл добавить строку 

Serial.println(results.value);

должен вроде выводиться код кнопки, но нет, постоянно выводится код который вызвал эту функцию, 

выводится  значение results.value, сформированное когда-то в строке 03. как было заказано.

Slsvok47
Offline
Зарегистрирован: 03.06.2018

а разве строке 03 что то формируется? это же проверка нажатия любой кнопки

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Slsvok47 пишет:

а разве строке 03 что то формируется? это же проверка нажатия любой кнопки

а ты значок & в скопках виишь?   А он есть.... 

Slsvok47
Offline
Зарегистрирован: 03.06.2018

Вот так вроде начало работать

void test(){
  while(results.value == 16187647){
   irrecv.decode(&results);
  Serial.println(results.value); 
  Serial.println("Test");
 irrecv.resume();
 delay(1000);
  } 
} 

 

KindMan
Offline
Зарегистрирован: 19.12.2018

Slsvok47 пишет:

Вот так вроде начало работать

void test(){
  while(results.value == 16187647){
   irrecv.decode(&results);
  Serial.println(results.value); 
  Serial.println("Test");
 irrecv.resume();
 delay(1000);
  } 
} 

 


Я даже боюсь спросить, зачем вам этот цикл?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

KindMan пишет:
Я даже боюсь спросить, зачем вам этот цикл?

Это будет следующий вопрос топикстартера, "Ребята, а зачем здесь цыкал?"

Slsvok47
Offline
Зарегистрирован: 03.06.2018

Конкретно этот цикл, чисто для примера, суть проекта эффекты для ws2812b, которые будут выполняться в циклах, и возможность менять их пультом

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

Slsvok47 пишет:

суть проекта эффекты для ws2812b, которые будут выполняться в циклах, и возможность менять их пультом

Тогда вопросов будет ещё много :-)