C ++ Arduino, запускает два цикла одновременно?

Итак, я только недавно погрузился в программирование Arduino. В настоящее время у меня есть базовая функция мигания вместе с программой RGB LED, которая меняет светодиод на синий, зеленый и красный в затухающих цветах. У меня есть 2 светодиода — простой и простой желтый светодиод, который должен функционировать как индикатор «рабочего состояния». И светодиод, который является RGB. Теперь я хочу, чтобы RGB нормально переходил через цвета, хотя я хочу, чтобы желтый светодиод постоянно мигал.
Как мне сделать свой код, чтобы два процесса могли работать одновременно?

0

Решение

Что-то вроде:

int timekeeper=0;
while (1)
{
do_fade(timekeeper);
if (timekeeper%100==0) {
do_blink_off();
}
if (timekeeper%100==50) {
do_blink_on();
}
delay(10);
timekeeper++;
}

Это сделано по памяти, поэтому ваш пробег может отличаться.
Я передал хронометрист do_fade (), чтобы вы могли выяснить, как далеко вы зашли. do_fade () обновит фейд, а затем сразу вернётся. do_blink_on () и do_blink_off () будут похожи — измените то, что вам нужно изменить, затем вернитесь. В этом примере do_fade () будет вызываться каждые 10 миллисекунд, do_blink_off () один раз в секунду, с do_blink_on () 1/2 секунды после (так далее, 1/2 секунды, выключено, 1/2 секунды, включено, 1 / 2 секунды …)

2

Другие решения

Ответ AMADANON будет работать, однако имейте в виду, что предпочтительным способом выполнения нескольких задач является прерывание по таймеру. Например, если вы хотите, чтобы ваш код делал что-то еще после того, как он исчезает, синхронизация этих других функций будет мешать миганию вашего индикатора. Чтобы решить эту проблему, вы используете таймеры, встроенные в Arduino.

В фоновом режиме таймер начинает отсчет, и когда он достигает определенного значения, он сбрасывает свой счетчик и запускает подпрограмму обработки прерываний, в которой вы бы включали / выключали светодиод.

Вот учебник по миганию светодиода с прерываниями по таймеру:
http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/

1