Ви не увійшли.
Сторінки 1
Доброго времени суток! Очень нужна помощь или пинок в правильную сторону с примером.
Собрал слайдер (рельсу) для таймлапсов, но вот не могу никак понять как организовать правильный таймер для него.
Есть функция:
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);, но решить пока не могу. Если У Вас форумчане есть идеи или решения по этой теме, помогите пожалуйста.
Сторінки 1