Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНТРОЛЛЕР по руски .docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
255.63 Кб
Скачать

6.C. Примеры скриптов

Начало работы: мигает светодиод

Следующий сценарий приведет к тому, красный светодиод на Maestro мигать один раз в секунду:

?

1 2 3 4 5 6 7

# Мигает красный светодиод один раз в секунду. начать   led_on   100 задержки   led_off   900 задержки повторения

Это хорошая идея, чтобы попытаться пошагового этого сценария, прежде чем делать что-либо дальше с помощью скриптов на Маэстро. В частности, обратите внимание на то, как команда "100" ставит число 100 в стеке, а команда ЗАДЕРЖКА потребляет этот номер. В языке сценариев Maestro, аргументы команд всегда должны быть помещены в стек до команд, которые используют их, что делает язык кажется назад по сравнению с другими языками. Это также означает, что вы можете организовать свой ​​код в различных направлениях. Например, эта программа эквивалентно приведенному выше:

?

1 2 3 4 5 6

# Мигает красный светодиод один раз в секунду. начать   900 100   led_on задержка   led_off задержки повторения

Цифры помещается в стек в начале цикла, а затем потребляется в дальнейшем в исполнении. Обратите внимание на порядке номеров, используемых здесь: 900 идет в стек первым , и она используется в прошлом .

Простая последовательность серво

Следующий сценарий показывает, как направить серво 0 до пяти различных позиций в цикле.

?

1 2 3 4 5 6 7 8 9 10 11 12 13

# Перемещение сервопривода 0 до пяти различных позиций, в цикле. начать   4000 0 сервопривода # набор серво 0 до 1,00 мс   500 задержки   5000 0 серво # 1,25 мс   500 задержки   6000 0 серво # 1,50 мс   500 задержки   7000 0 серво # 1,75 мс   500 задержки   8000 0 сервопривода # 2,00 мс   500 задержки повтора

Серийный режим должен не быть настроен на обнаружение скорости передачи для этого сценария на работу. В обнаружения режиме скорости передачи данных, маэстро не позволяет любой из следящих выходов, пока не было получено начало байт.

Следует отметить, что сервопривод позиции указаны в единицах 0,25 мкс, поэтому значение 4000 соответствует 1 мс. Текст после # является комментарий ; это не становится запрограммирован на устройство, но она может быть полезна для записей о том, как работает программа. Хорошие комментарии необходимы для сложных программ. Важно помнить задержки команд; без них, скрипт не будет ждать вообще между командами серво, запуск цикла сотни раз в секунду.

Сжатие последовательность

Программа выше занимает 58 байт памяти программ: 11 байт для каждой позиции серво и 3 для цикла. При таких темпах, мы могли сохранить до 92 позиций серво в памяти 1024-байт на Micro Maestro или 744 позиций серво в памяти 8192-байта мини Маэстро.Чтобы получить максимальную отдачу от ограниченной памятью, есть множество способов для сжатия программу. Наиболее важным является, чтобы использовать подпрограмм . Например, поскольку мы повторяем инструкциям "0 серво 500 задержки" несколько раз, мы можем переместить их в подпрограмму для экономии места. В то же время, это упрощает код и делает его легче сделать будущие модификации, такие как изменения скорости всей последовательности.

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

# Перемещение серво 0 до пяти различных позиций, в цикле. начать   4000   кадр   5000   кадр   6000   кадр   7000   кадр   8000   кадров повторите   суб рамка   0 серво   500 задержки   возврата

Используя подпрограмму приносит сценарий до 31 байт: 4 на позицию и 11 дополнительных байтов для цикла и определить КАДР.Мы можем пойти дальше: проверки скомпилированный код показывает, что положить каждый номер в стеке требуется 3 байта: один байт в качестве команды и два для числа двухбайтового. Числа от 0 до 255 может быть загружен в стек с помощью всего двух байтов. Предположим, в нашем приложении мы не нужна полная 0,25 мкс разрешение устройства, так как все наши настройки кратны 100 Тогда мы можем использовать меньшее количество, чтобы спасти другой байт.:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

# Перемещение сервопривода 0 до пяти различных позиций, в цикле. начать   40 кадров   50 кадров   60 кадров   70 кадров   80 кадр повтора   # нагрузок рама указано в 25 нас единиц югу кадр   100 раз   0 серво   500 задержки   возврата

Эта программа имеет длину 29 байт, с 3 байтов, используемых в положении и 14 байт накладных расходов. Обратите внимание, что мы могли бы получить такую ​​же эффективность, если мы использовали команду SERVO_8BIT, которая принимает аргумент однобайтного от 0 до 254 Мы можем пойти еще меньше, поставив все номера вместе.:

?

1 2 3 4 5 6 7 8 9 10 11 12

# Перемещение сервопривода 0 до пяти различных позиций, в цикле. начать   80 70 60 50 40   рамка рамка рамка рамка рамка повторные   # нагрузок рама указано в 25 нас единиц югу кадр   100 раз   0 серво   500 задержки   возврата

Если вы выходите через этой версии программы, вы также заметите, что все пять номеров размещаются в стеке в одном шаге: это потому, что компилятор может использовать одну команду поставить несколько номеров в стеке. Использование одной команды для нескольких номеров экономит место: мы сейчас до всего 26 байт. Только 12 байт используются для 5 кадров, в среднем 2,4 байтов на кадр. Это, вероятно, достаточно компактен - путем дублирования эту структуру мы могли поместиться 420 различных позиций в память программ 1024-байт на Micro Maestro. Однако код может получить еще меньше. Рассмотрим этот сценарий, который использует 31 кадров, чтобы сделать гладкую возвратно-поступательное движение:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

# Перемещение сервомашинку синусоиды между 1 и 2 мс. начать   60 64 68 71 74 77 79 80 80 79 78 76 73 70 66 62   58 54 50 47 44 42 41 40 40 41 43 46 49 52 56   all_frames повторить   суб all_frames   начать     Глубина   в то время как     100 раз     0 серво     100 задержки   повторного   возвращения

В этой версии кода, мы переписали кадре подпрограммы, с помощью команды DEPTH для автоматической загрузки кадров из стека, пока Есть не осталось. Эта программа использует 34 байт для хранения 31 кадр, в среднем всего 1,1 байт на кадр. Мы могли бы хранить последовательность, содержащую 900 различных позиций в памяти Micro Maestro с помощью такого рода сценарии.

Создание гладкие последовательности с GET_MOVING_STATE

Скорость и ускорение установки могут быть использованы для изготовления гладких последовательности движения с Маэстро. Тем не менее, общая проблема в том, что вы не знаете, сколько вам нужно, чтобы задержка между кадрами, чтобы сервопривод, чтобы достичь своей окончательной позиции. Вот пример того, как использовать встроенную функцию GET_MOVING_STATE, чтобы сделать гладкую последовательность, а задержка:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

# В этом примере используется скорость и ускорение, чтобы сделать гладкую # движение назад и вперед между 1 и 2 мс. 3 0 ускорение 30 0 Скорость   начать   4000 0 сервопривода # набор серво 0 до 1,00 мс   moving_wait   8000 0 серво # 2,00 мс   moving_wait повторить   суб moving_wait   начать     get_moving_state   а     # не ждать, пока он больше не движется   повтора   возврат

GET_MOVING_STATE возвращает 1, пока есть хотя бы один серво, что ограничена скорость или ускорение еще движется, так что вы можете использовать его, когда вы хотите, чтобы ждать все движения, чтобы остановить, прежде чем приступить к следующему шагу скрипта.

Использование аналогового входа для управления сервоприводами

Важной особенностью Маэстро, что он может быть использован для чтения входные сигналы от датчиков, переключателей или других устройств. В качестве простого примера, предположим, что мы хотим использовать потенциометр для контроля положения сервопривода. Для этого примера, подключения потенциометра для формирования делитель напряжения от 5В до 0, с центральной водопроводной, подключенного к каналу 1. Настройка канала 1 как вход, и изучить сигнал на вкладке Состояние Центра управления Maestro. Вы должны увидеть индикатор положения изменяться от 0 до 255 мкс, как вы включите потенциометра с одной стороны на другую. В сценарии, этот диапазон соответствует чисел от 0 до 1023 Мы можем масштабировать это число примерно до полного диапазона сервопривода, затем установите положение сервопривода на этот номер, все в цикле.:

?

1 2 3 4 5 6

# Наборы серво 0 до позиции, основанной на аналоговый вход. начать   1 get_position     # получить значение горшка, 0-1023   4 раза 4000 плюс # растягивать его на 4000-8092, примерно 1-2 мс   0 сервопривода            # набор серво 0 основе к значению повторения

Кроме того, вы, возможно, захотите сервопривод пойти в дискретных положений в зависимости от входного значения:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

# Установить сервопривод в 4000, 6000 или 8000 в зависимости от аналогового входа. начать   1 get_position     # получить значение кастрюлю, 0-1023   DUP 300 less_than   если     4000   # перейти по 4000 для значений 0-299   еще     DUP 600 less_than     если       6000 # перейти по 6000 для значений 300-599     остальное       8000 # перейти по 8000 для значений 600-1023     ENDIF   ENDIF   0 серво   падение      # удалить исходную копию горшок значение повтора

В приведенном выше примере работает, но когда потенциометр близко к 300 или 600, шум на аналого-цифрового может привести сервопривод прыгать случайно туда и обратно. Лучший способ сделать это состоит с гистерезисом:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

# Установить сервопривод в 4000, 6000 или 8000 в зависимости от аналогового входа, с гистерезисом. начать   4000 0 300 servo_range   6000 300 600 servo_range   8000 600 1023 servo_range повторите   # использование: <pos> <Low> <High> servo_range # Если горшок в диапазоне, указанном на низких и высоких, # держит серво 0 в позиции до горшка движется из этого # диапазоне, с гистерезиса. суб servo_range   горшок 2 киркой less_than logical_not     #> = низкий   горшок 2 выбор greater_than logical_not # <= высокий   logical_and   если     начать       горшок 2 выбрать 10 минус less_than logical_not    #> = низкий - 10       горшок 2 выбрать 10 плюс greater_than logical_not # <= высокий + 10       logical_and     а       2 выбрать 0 серво     повтора   EndIf   падение падение падение   возврата   к югу горшок   1 get_position   возврат

Этот пример использует один диапазон для принятия решения, куда идти при осуществлении перехода, то его ждет серво, чтобы оставить немного больший диапазон, прежде чем принимать еще один переход. Пока разность (10 в этом примере), больше, чем количество шума, это предотвратит случайное прыжков.

Обратите внимание, что этот пример будет работать только если вы подключаете ваш потенциометра к одному из аналоговых входных способных каналов (каналы 0-11). Входы на других каналах являются цифровыми.

Использование кнопки или переключатель для управления сервоприводами

Можно подключить кнопку или переключиться на Maestro и определять состояние кнопки в вашем сценарии. Скрипт перемещает сервопривод через предопределенной последовательности движений, перейти к следующему шагу каждый раз, когда нажата кнопка. Он использует канал 0 для кнопки и канала 1 для сервопривода.

Кнопка канал должен быть сконфигурирован как вход и проводной правильно. См. раздел 7.b для получения инструкций о том, как подключить кнопку на Maestro с помощью нагрузочного резистора, так что вход, как правило, высока, и при нажатии на кнопку она идет на низком уровне.

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63

перейти main_loop    # Запустите основной цикл при запуске скрипта (см. ниже).   # Эта подпрограмма возвращает 1, если нажата кнопка, 0 в противном случае. # Чтобы преобразовать значение входного сигнала (0-1023) в цифровое значение (0 или 1) представляющих # состояние кнопки, мы делаем сравнение с произвольной порога (500). # Эта подпрограмма ставит логическую значение 1 или 0 в стеке, в зависимости # от того, нажата кнопка или нет. югу кнопку   0 get_position 500 less_than   обратного   # Подпрограмма использует кнопку подпрограмму выше ждать нажатия кнопки, # включая небольшой отсрочки для устранения шума или подпрыгивает на входе. суб wait_for_button_press   wait_for_button_open_10ms   wait_for_button_closed_10ms   возврата   # ожидать кнопку, чтобы быть не нажимается в течение по крайней мере 10 мс. суб wait_for_button_open_10ms   get_ms # поставить текущее время в стеке   начать     # переустановить время в стеке, если она нажата     кнопка     , если       падение get_ms     остальное       get_ms более минус 10 greater_than       если падение возврата ENDIF     ENDIF   повторные   # Дождитесь кнопку, чтобы быть нажата ., по крайней мере 10 мс суб wait_for_button_closed_10ms   get_ms   начать     # переустановить время в стеке, если она не нажата     кнопка     , если       get_ms более минус 10 greater_than       если падение возврата ENDIF     ELSE       падение get_ms     ENDIF   повторить   # Пример, как использовать wait_for_button_press показан ниже:   # Используется WAIT_FOR_BUTTON_PRESS, чтобы позволить пользователю пошагово # последовательность позиций по сервопривода 1. main_loop: начать   4000 кадров   5000 кадров   6000 кадров   7000 кадров   8000 кадров повторите   суб рамки   wait_for_button_press   1 серво   возврат

Так же, как в примерах секвенирования выше, сценарий шаги через последовательность кадров, но вместо того, определенную задержку между кадрами, этот пример ждет нажатия кнопки. WAIT_FOR_BUTTON_PRESS подпрограмма может использоваться в различных сценариях, когда вы хотите ждать нажатия кнопки. Кроме того, можно расширить этот пример, чтобы позволить несколько кнопок, непрерывное движение, или множество других видов контроля кнопки.

Использование нескольких кнопок или переключателей для управления сервоприводами

Этот сценарий показывает, как подключить Maestro в нескольких кнопок. При нажатии кнопки, он запускает соответствующую последовательность.

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

# Когда сценарий не делать что-либо еще, # эта петля будет ожидать нажатия кнопок. Когда кнопка нажата # он работает соответствующую последовательность. начать   button_a если sequence_a ENDIF   button_b если sequence_b ENDIF   button_c если sequence_c ENDIF повторите   # Эти подпрограммы каждый возвращает 1, если соответствующая нажатии кнопку #, и возвращать 0 в противном случае. # В настоящее время button_a присваивается к каналу 0, # button_b назначается к каналу 1, и # button_c назначается на канал 2. # Эти каналы должны быть настроены как входы в Настройки # Channel                         Эти подпрограммы каждый выполнять произвольную последовательность # движений серво. Вы должны изменить их, чтобы соответствовать # приложения. суб sequence_a   4000 3 серво 1000 задержка   6000 3 серво 500 задержки   возврата     к югу sequence_b   8000 4 серво 900 задержки   7000 4 серво 900 задержки   6000 4 сервопривода 900 задержки   возврата   суб sequence_c   10 4 скорости   7000 4 сервопривода 3000 задержать   6000 4 сервопривода 3000 задержка   возврата

Пожалуйста, обратите внимание, что этот сценарий не делает многозадачность. Если последовательность работает, сценарий не будет обнаруживать другие нажатие кнопок, пока последовательность не будет сделано. Это можно сделать кнопки работают независимо, но сценарий необходимо будет намного сложнее. В зависимости от того, насколько квалифицированный вы находитесь в написании сценариев, вы можете предпочесть использовать несколько маэстро вместо этого.

Длительные задержки

Самая длинная возможная задержка с командой задержка примерно в 32 секунд. В некоторых случаях, вы хотите, чтобы задержки гораздо дольше, чем это. Вот пример, который показывает, как задержки многих секунд или минут может быть достигнуто:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

# Переходит серво 0 взад и вперед, с задержкой в 10 минут между движениями. начать   4000 0 серво   10 delay_minutes   8000 0 серво   10 delay_minutes повторить   # задержку на указанное количество секунд, до 65535 с суб delay_seconds   начать DUP а       # проверка, если Количество дошел до нуля     1 минус 1000 задержка # вычесть одно и 1с задержки   повторить   падение возврата           # удалить 0 из стека и вернуться   # задержку на указанное количество минут, до 65535 мин суб delay_minutes   начать DUP а     1 минус 60 delay_seconds # вычесть единицу и задержка 1мин   повторите   падение возврата                 # удалить 0 из стека и возврат

Легко написать подпрограммы для задержек часов, дней, недель или что вы хотите. Имейте в виду, однако, что таймер на Micro Maestro не так точна, как секундомер - эти задержки могут легко быть выключен на 1%.

Цифровой выход

Подключение Micro Maestro к цепочке ShiftBars. Одного источника силы все из устройств 12V.

Цифровой выход особенностью Маэстро способен управлять что-нибудь от простых схем для интеллектуальных устройств, таких как ShiftBrite модули СИД и ShiftBar LED контроллеры , которые используют простой синхронный последовательный протокол. В этом примере, выводы часы, защелки, и данных из ShiftBrite или ShiftBar подключены к серво каналов 0, 1, и 2, соответственно, и эти каналы все сконфигурированы как выходы. Подпрограмма гамма определяется здесь занимает 10-разрядные красные, зеленые и синие значения из стека, затем посылает цвета пакет 32 байт и переключает защелки для обновления ShiftBrite с новым значением цвета. Подпрограмма может быть изменена, если это необходимо контролировать большую цепь ShiftBrites.

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

начать   1023 0 0 RGB 500 задержки   # красный      0 1023 0 RGB 500 задержки   # зеленый       0 0 1023 RGB 500 задержки   # синий повторите   # Подпрограмма для установки значения RGB из ShiftBrite / ShiftBar. использования # пример: 1023 511 255 RGB суб RGB   0 send_bit # этот бит не имеет значения   0 send_bit # на "адрес" немного - 0 означает цветовую командную   своп гниль гниль   send_10_bit_value   send_10_bit_value   send_10_bit_value   0 1 8000 1 серво серво # переключения защелка контактный   возвращение   # посылает числовое значение в виде последовательности 10 бит суб send_10_bit_value   512   начинают     DUP   время     над над bitwise_and send_bit     1 shift_right   повтора   падение падение   возврата   # посылает один бит суб send_bit   если 8000 еще 0 ENDIF   2 серво                 # набор данных 0 или 1   0 0 8000 0 серво серво # переключить ЧАСЫ   возврата

Обратите внимание, что мы используем 0, чтобы установить мощность в режиме малого и 8000 для установки выходной максимума. Эти разумные варианты, но любое значение от 0 до 5999 может быть использован для низкой, и все от 6000 до 32767 могут быть использованы для высокой, если это необходимо.

Последовательный выход (Mini Maestro 12, 18, и 24 только)

На мини-Maestro 12, 18, и 24, сценарий может быть использован для отправки последовательных данных на последовательный порт TTL-уровня (Техас). Это означает, что Maestro может управлять дополнительными Maestros, что позволяет большим количеством каналов без отдельного микроконтроллера. Вот простая программа, которая показывает, как серийный команда может быть использована для управления другим Maestro. Чтобы использовать этот код, настроить оба маэстро в режиме UART на той же самой скорости, и подключить TX на мастера к RX на раб.

?

1 2 3 4 5 6 7 8 9 10

100 задержки # Начальная задержка, чтобы убедиться, что другой маэстро время создать   начинают   127 0 mini_ssc # набор серво 0 позиционировать 127, используя мини-SSC команду   254 0 mini_ssc # набор серво 0 позиционировать 254 повторите   суб mini_ssc   0xFF serial_send_byte serial_send_byte serial_send_byte   возврат