Я делаю программу управления светодиодами (конечно, с помощью FastLED) и использую Serial (с монитором Serial) для управления ею.Просто подключен через USB и по большей части работает просто отлично.Тем не менее, с длинными, мигающими процедурами я заметил, что не могу их остановить и заставить светодиоды делать что-то еще.Процедура прошивки в моем коде очень проста:
void flash(CRGB color, int count, int del){
for(int i = 0; i < count; i++){
if(pause){
break;
}
fillLeds(color.r, color.g, color.b);
milliDelay(del);
fillLeds(0,0,0);
milliDelay(del);
}
}
С fillLeds(r,g,b)
в качестве цикла for, циклом и настройкой всех светодиодов на определенный цвет, а milliDelay
это просто delay()
с использованием millis
а не функция delay()
.Что мне нужно, так это уметь приостанавливать не только это, но и другие функции (вероятно, используя break;
), а затем выполнять другой код.Кажется, легко, правда?Ну, я заметил, что когда я посылаю байт через последовательный порт, он попадает в эту «очередь», если хотите, и затем последовательно читается.Я не могу этого случиться.Что мне нужно, так это следующий байт, вводящий Serial, чтобы активировать какое-то событие, которое приостанавливает выполнение другой функции flash()
и затем используется.Я реализовал это следующим образом:
void loop()
{
if (Serial.available() > 0) {
int x = Serial.read();
Serial.print(x);
handleRequest(x);
}
FastLED.show();
FastLED.delay(1000 / UPDATES_PER_SECOND);
}
, где handleRequest(x);
- это просто длинный оператор switch с вызовами метода flash, с использованием разных цветов и т. Д.
Howможно ли заставить Arduino приостанавливать другие циклы при получении нового байта, вместо того, чтобы добавить его в эту «очередь» для последующей обработки?Если это невозможно, спасибо за чтение в любом случае.Я пытался использовать serialEvent()
, который не работает.