Никак не могу одолеть вопрос таймеров. Как убрать из программы delay? В Гугле ищется лишь как мигать светодиодом без delay, но это совсем не то, что нужно. Вот кусочек кода именно запуска двигателя:
Код: Выделить всё
void autostart() {
digitalWrite(main_relay, HIGH); // включаем главное реле
digitalWrite(engine_relay, HIGH); // включаем реле зажигания
digitalWrite(immo_relay, HIGH); // включаем реле обходчика иммобилайзера
delay(3000); // ждем 3 секунды, пока накачает бензонасос
digitalWrite(starter_relay, HIGH); // включаем реле стартера
delay(1000); // на 1 секунду
if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 2 секунды)
else if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 3 секунды)
else if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 4 секунды)
else if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 5 секунды)
else digitalWrite(starter_relay, LOW); // иначе выключаем стартер
}Так вот мне нужно крутить стартером, пока статус двигателя не изменится на 1 (значит запущен), НО крутить при этом не более 5 секунд! Если посмотрели код, то наверняка заметите как топорно я это организовал через кучу задержек. Боюсь, что во время этих задержек контроллер вообще не будет получать никаких данных с ламп и будут глюки при определении запущен двигатель или нет.
Как это можно реализовать при помощи millis()?
И еще дополнительный вопрос, как можно сделать несколько таймеров на основе millis() в одном скетче? Толковых примеров не встречал, а методом тыка получается какая-то белиберда. Заранее спасибо вам за ответы!


