Скачки задержки
- Войдите на сайт для отправки комментариев
Ср, 28/02/2018 - 21:01
Здравствуйте. Я делаю поворотную платформу для съемки timelapse/панорам. Устройство предполагает задание задержки между шагами сервы с потенциометра. Проблема в том, что задержка, которую я задаю, очень сильно прыгает и это очень сильно сказывается на плавности картинки. То, как это выглядит при выводе в серийный порт, видно на скрине. Как это исправить?
Скетч:
#include <Servo.h>
Servo myservo;
int pos = 0;
int del;
int potpin = 0;
unsigned long timing;
void setup()
{
myservo.attach(3);
Serial.begin (9600);
}
void loop()
{
for (pos = 10; pos <= 170; pos += 1) {
del = analogRead(potpin);
del = map(del, 0, 1023, 60, 23000);
Serial.println(del);
myservo.write(pos);
delay (del);
}
for (pos = 170; pos >= 10; pos -= 1) {
del = analogRead(potpin);
del= map(del, 0, 1023, 60, 23000);
Serial.println(del);
myservo.write(pos);
delay (del);
}
}
ЗЫ: Программа наверняка написана нерационально, прошу сильно тряпками не кидаться, я только начал осваивать ардуино)
Вставьте код как положено. А данные из мониторе скопипастьте также, как код. Тогда видно будет, посмотрим.
Данные порта:
а зачем снимать значение с потенциометра по время работы программы? Вы во время съемки таймлапса планируете менять скорость?
Не совсем. Мне нужна подстройка под частоту кадров и изменение скорости в большом диапазоне для видеопанорам с обычной скоростью. В программе, которую я отправил, мне не нравится то, что значение не снимется, пока не закончится время задержки. При большой задержке это сильно тратит время.
Присоединяюсь к предыдущему замечанию.
А про выбросы.
Ваши выброс очень похожи не "дребезг потенциометра", т.е. при вращении ручки (а если потенциометр дешёвый и раздолбанный, так часто и "от сквозняка") иногда ненадолго пропадает контакт и средний провод провисает в воздухе.
Можно взять очень дорогой потенциометр, но на 100% это проблему не решит (тем более, что в гаражах, и наших, и китайских давно научились слово Bourns писать на пластике).
Ваше всё в данном случае - простой программный ФНЧ - он должен решить проблему.
Охххх так у Вас там delay! Тогда это скорее всего не дребезг! Тогда Вы просто успеваете повернуть ручку на ХЗ сколько пока программа в delay сидит. Избавляйтесь от delay!
Охххх так у Вас там delay! Тогда это скорее всего не дребезг! Тогда Вы просто успеваете повернуть ручку на ХЗ сколько пока программа в delay сидит. Избавляйтесь от delay!
А может и наводки какие. Схема небось пока на коленке собрана.
Охххх, как минимум нужно отказаться от delay. И раз уж это поворотный механизм для панорам или таймлапса, то сначала настраиваем скорость, а потом включаем механизм в работу, а не во время работы. Например в setup считываем значение потенциометра , пока 0 не выходим из setup, если не ноль то ждем. Если тоже самое значение сохранялось пять сек, то это значение берется как рабочее и переходим в loop. В loop к потенциометру не обращаемся.
Хотя в loop уже можно delay оставить, если там больше ничего другого не будет.
Я понимаю, что delay при таких задержках-зло. Я пробовал millis, но что-то не срослось. Не понимаю, как с ним работать в этом случае.
http://arduino.ru/tutorials/BlinkWithoutDelay
Спасибо, разберусь. Сейчас я переместил считывание данных в void loop, всё стабильно. Но каждый раз делать ресет очень неудобно, серва дергается и значение сложно подобрать. Надеюсь это поможет.
Можно и в loop настройки сделать, можно и из цикла панорамирования выход сделать если потенциометр в 0 вернуть и не двигать несколько секунд. Надо ставить задачу со всеми хотелками и потом уже думать как реализовать.
Можно и в loop настройки сделать, можно и из цикла панорамирования выход сделать если потенциометр в 0 вернуть и не двигать несколько секунд. Надо ставить задачу со всеми хотелками и потом уже думать как реализовать.