Управление 3-мя серво без "Delay"

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Управление 3-мя серво без "Delay"

Сообщение Atiroz » 08 сен 2016, 11:25

Всем ку!

Вопрос, как не "паузить" Arduino Uno при управлении 3-мя серво? Например, первая серво должна крутануть туда-сюда 1 раз каждые 20 секунд, вторая серво на каждой 21-ой секунде (время от сработатывания первой сервы) должна прокрутиться 10 секунд туда-сюда без останова, ... И плюс третья серво же еще - та просто должна непрерывно работать туда-сюда, начиная с 5-й секунды запуска системы и до момента выключения системы... Паузы "delay" просто всё портят - один двиг крутит, компьютер соответственно - на паузе, ну или ждёт окончания паузы, чтобы начать выполнять следующую команду в цикле программы, ну и о синхронной работе сервоприводов тут можно и не мечтать. Что делать, друзья?
Atiroz
 
Сообщения: 7
Зарегистрирован: 16 янв 2016, 09:33

Re: Управление 3-мя серво без "Delay"

Сообщение Madf » 08 сен 2016, 13:12

ну так не делайте алгоритм линейным
стройте его так, что за 1 проход производится "одновременная" обработка движений на ВСЕХ сервах
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Управление 3-мя серво без "Delay"

Сообщение Atiroz » 08 сен 2016, 13:38

Madf писал(а):ну так не делайте алгоритм линейным
стройте его так, что за 1 проход производится "одновременная" обработка движений на ВСЕХ сервах


Ну.. например?
Допустим, одну серву крутим постоянно, вторую каждые 5 сек один раз, третью каждые 21 сек крутим 10 раз... Как "нелинейно" это сделать, не пойму что-то... Ардуинка-то одна...
Atiroz
 
Сообщения: 7
Зарегистрирован: 16 янв 2016, 09:33

Re: Управление 3-мя серво без "Delay"

Сообщение Madf » 08 сен 2016, 15:08

Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Управление 3-мя серво без "Delay"

Сообщение Eruman » 08 сен 2016, 18:22

2Мадф: Не все по-аглицки шпрехают. Надобно попонятнее, к Яндексу посылать.

2Атироз: По моему разумению, проще в бесконечной петле проверять пробежавшее время, и в зависимости от его значения выполнять команды. Функция millis() возвращает количество миллисекунд от старта. Делите её на время, заданное у вас тиком, и или остатки от деления анализируйте, или количество тиков, или оба значения сразу. :)

Например, посмотрите на реализацию Blink без задержек: http://arduino.ru/tutorials/BlinkWithoutDelay

Есть еще неплохие библиотеки, позволяющие потоки организовать, но это, наверное, вам будет рановато.
Соединяй и здравствуй.
Аватара пользователя
Eruman
 
Сообщения: 897
Зарегистрирован: 12 авг 2010, 15:10
Откуда: Астраханская обл.


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15