Проблема заключается в том, что
strip.show()
является блокирующей функцией, которая отправляет данные на ленту и ждет, пока они будут обработаны. Таким образом, если
strip.show()
вызывается внутри цикла, он будет блокироваться каждый раз, когда выполняется. Это может привести к блокировке программы и невозможности обработки других событий, таких как чтение данных с ИК-приемника.
Вы можете решить эту проблему, вызывая
strip.show()
только тогда, когда есть новые данные с пульта. Для этого вы можете привести код к такому виду:
void loop(){
if(ir.available()){ //проверка "если поступили данные на ИК транзистор"
mode = ir.readCommand(); //присваиваем значению переменной значение с ИК транзистора
Serial.println(mode); //выводим в порт значение с ИК транзистора
strip.setPixelColor(1, strip.Color(0, 0, 255)); //помечаем 1 пиксел синим цветом
strip.show(); //подаем сигнал на ленту
}
}
-
strip.show()
будет вызываться только тогда, когда поступит новый сигнал с пульта.
Вы также можете изменить функцию
irIsr()
следующим образом:
void irIsr(){
ir.tick();
strip.show(); //подаем сигнал на ленту
}
Также, можно попробовать использовать неблокирующий способ чтения данных с ИК-приемника, чтобы избежать блокировки программы при ожидании данных. Например, можно использовать библиотеку
IRremote
и метод
irrecv.decode()
для проверки наличия данных с приемника без блокировки программы.
Если ответ помог или считаете что может быть полезен другим - не забудьте отметить его как решение вашего вопроса. Успехов!