#1 Програмування Arduino » Таймер для двух функций или интервал внутри интервала??? » 2015-07-30 19:27:02

fastudio4
відповідей: 2

Доброго времени суток! Очень нужна помощь или пинок в правильную сторону с примером.
Собрал слайдер (рельсу) для таймлапсов, но вот не могу никак понять как организовать правильный таймер для него.
Есть функция:
void shoot() {
    digitalWrite(CAM, HIGH);
    delay(200);
    digitalWrite(CAM, LOW);
}
которая заставляет срабатывать затвор, и функция для шаговика:
void stepper(unsigned int Step, int Speed, boolean Set) {
  digitalWrite(DIR, Set);  // Направление вращения 0, 1
  for (int i = 0; i < Step; i++){ // Шаги
    digitalWrite(STEP, HIGH);
    delayMicroseconds(Speed);
    digitalWrite(STEP, LOW);
    delayMicroseconds(Speed);
  }
}
Соответственно запускающая при её вызове (stepper(20, 500, 0);).
Загвоздка заключается в том что сначала должен срабатывать затвор камеры, а уж через несколько секунд, когда камера устаканится сработает шаговик.
Пробовал через функцию отправлять в таймер:
void shootStep() {
  shoot();
  delay(2000);
  stepper(20, 500, 0);
}

Но вот delay(2000); портит всю малину, так как ещё есть дисплей, на котором выводятся значения остатка кадров, интервал и прочая лабуда. Все параметры выставляются кнопками на приборе, которые как и кнопка старта программы работает не корректно из за этого прерывания.

пример таймера на millis() который я использовал в своих целях справляется:

unsigned long interval = 5000; //Интервал
unsigned long previousMillis = 0;

void loop(){
  if ((unsigned long)(millis() - previousMillis) >= interval) {
  previousMillis = millis();
  shootStep();
}

menu();
}

Возможно я копаю не туда, и возможно решение лежит в работе с интервалом между камерой и шаговиком для устранения delay(2000);, но решить пока не могу. Если У Вас форумчане есть идеи или решения по этой теме, помогите пожалуйста.

Підвал форуму