void loop(){ for (pos=20; pos<=160; pos=pos+1) { servo.write(pos); delay(servoDelay); } for (pos=160; pos>=20; pos=pos-1) { myPointer.write(pos); delay(servoDelay); }
блин что? только myPointer не заменил на servo.
Добавлено спустя 4 минуты 33 секунды:
robovan писал(а):... я так понял, что этот кусок кода описывает время которое нужно что бы повернутся серве на какой то угол?
http://roboforum.ru/forum10/topic15622-15.html#p332360 нет. там обьявление переменных и простенький цикл, в котором тебе нужно посмотреть сколько прошло времени и вычислить, на какой угол в этот момент должна быть повёрнута серва.
так пытайся вникать в написаное. нету у таких серв "плавно перемещайся туда-то", вот нет и всё. получает она управляющие импульсы и если условно и не вникать в тараканы электроники сервы, вращает она почти с одинаковой скоростью. плавно сам делай. твоя задача сводится к примитивнейшим математическим вычислениям и про то, что есть сервы, ардуины, программирование, можно особо не думать. абстрагируйся. у тебя есть числа - начальное, текущее и конечное положения. ещё есть текущее значение времени или время, прошедшее с какого-то момента, допустим с начала вращения сервы. ещё есть значение времени, за которое текущее положение должно изменяться от начального до конечного. вот смотришь сколько времени прошло и вычисляешь, чему должно равняться это текущее значение. хочешь, делай как в примере с millis. хочешь делай через цикл for. давай второй вариант разжую. начальное положение 20, конечное 80. должно провернуться за одну секунду. допустим текущее значение должно меняться за 10 итераций. значит делишь 60 градусов и 1000 миллисекунд на 10. тогда будет примерно так
вот для своего кода примерно так и делаешь для каждой сервы. у тебя в последнем коде задаётся 4 положения, вот для нужных серв все 4 раза и делай такие циклы. примитивно, много кода, но для развития понимания нормально. с millis всё тоже самое, просто смотришь сколько времени прошло и вычисляешь, в каком положении должна быть серва. с for ты просто сразу посчитал нужную задержку и на сколько положение должно было измениться на каждой итерации.
на одной сделай сначала двумя этими вариантами - с for и с while, в котором позиция на основе millis вычисляется. потом за две берись. если у тебя время, за которое должны несколько серв провернуться одинаково, значит вычисляешь на какой коофициент умножать и будет как-то так for(i=1; i<=60; i++) { servo.write(20 + i); servo2.write(20 + i * 1.05); delay(17); } или пробуй придумать как ещё, вариантов много. сначала простые варианты, хоть в лоб и коряво. потом пробовать улучшать и усложнять. код последовательно и что с того? перечитай предыдущую страницу. процессов несколько (движение сервы, прерывание таймера,...), они дискретны по времени и у каждого свой шаг времени. в прерывании управляющий сигнал 50 раз в секунду формируется. и т.д. времени на вычисления и вызов servo.write вагон и маленькая тележка. чуть позже в любом случае придешь к тому, что нужно будет не такой корявенький for делать и заранее вычислять, а на ходу определять, в какое положение должна стремиться серва и вычислять положение, допустим через тот же millis.
коряво-дубовый вариант. вникай и тренируйся с различными вариантами. потом еще кучу раз всё с нуля переписывать. если сразу делать сложней, так совсем ничего не поймешь. ты же не хочешь перестрелять всех со седей от злости? ружьишко вон какое грозное (ещё хоть не отобрали?).
Добавлено спустя 2 минуты 19 секунд: если бы задача кзоскелета только шагать то можно и так))) но нужны действия сесть, встать, шагагать, поворот при остановке.
Добавлено спустя 22 минуты 44 секунды: посмотрите внимательно это видео