Polulu Micro Maestro 6 Guía De Usuario página 27

Tabla de contenido
Este bucle continuará siempre. Si quieres un bucle que pueda salirse alguna vez debes utilizar
WHILE que es lo mejor para ese caso. WHILE consume mayor número en la pila y salta al final del
bucle en caso de ser 0. Por ejemplo, supongamos que queremos repetir el bucle 10 veces:
10 # arranca con 10 en la pila
begin
dup
# copia el numero a la pila - the copy will be consumed by WHILE
while
# salta al final si contador es 0
8000 1 servo
500 delay
4000 1 servo
500 delay
1 minus # resta 1 del numero de veces que quedan
repeat
Fíjate que los bucles BEGIN...WHILE...REPEAT son similares a los bucles de muchos lenguajes
pero solamente en los scripts de Maestro, el WHILE salta después de su argumento.
Para las acciones condicionales el IF...ELSE...ENDIF también se usan. Supongamos que queremos
construir un sistema con un sensor en el canal 3 y queremos ajustar el servo 5 a 6000 (1,5ms) si el
valor de entrada es menor de 512 (cerca de 2,5V). En caso contrario el servo se ajusta a 7000
(1,75ms). El código siguiente realiza esta labor complicada:
3 get_position
512 less_than
if
6000 5 servo
else
7000 5 servo
endif
En muchos lenguajes ELSE es opcional. Tenga en cuenta una vez más que esto parece en principio
ir hacia atrás respecto a otros lenguajes, ya viene después la condición. Las estructuras de WHILE y
de IF son suficientes para crear cualquier tipo de secuencia de comandos. Sin embargo, hay
momentos en que es conveniente reflexionar sobre lo que está intentando hacer un bucle o una
rama. Si sólo desea saltar directamente de una parte del código a otra, puede utilizar un GOTO.
goto mylabel
# ...cualquier línea de código se salta...
4000 1 servo
mylabel: # el programa continua
4000 2 servo
Solo el servo 2 se pone a 4000, mientras que el servo 1 no cambia ya que la etiqueta esta después.
Subrutinas
Puede ser útil usar la misma secuencia de comandos varias veces a lo largo del programa. Las
subrutinas se utilizan para hacer más fácil y eficiente esto. Por ejemplo, supongamos es necesario
establecer varias veces una posición neutral de 6000 (1,5 ms) utilizando la secuencia "servo 6000 1
servo 6000 2". Se puede encapsular en una subrutina como sigue:
sub neutral
6000 1 servo
6000 2 servo
return
Cuando quieras realizar la operación para los servos solo tienes que escribir como comando
"neutral". Hay rutinas avanzadas que pueden tomar valores de la pila. Por ejemplo la subrutina:
sub set_servos
2 servo 1 servo
return
ajusta el canal 2 según valor de la parte superior de la pila y el canal 1 según el valor siguiente.
Luego si escribes "4000 6000 set_servos", el script ajusta el canal 1 a 4000 y el canal 2 a 6000.
Hay subrutinas que pueden llamar a otras subrutinas, hasta un límite de 10 niveles de recursividad.
Por ejemplo, puede aplicarse la subrutina "neutral" por encima de la llamada a set_servos:
sub neutral
6000 6000 set_servos
return
# coge el valor de la entrada 3 como numero de 0 a 1023
# comprueba si es menor de 512 -> 1 cierto, 0 es falso
# esta parte funcioan si input3 < 512
# esta parte funciona cuando input3 >= 512
# pasa por encima de esta línea
a partir de aqui
27
Tabla de contenido
loading

Este manual también es adecuado para:

Mini maestro 12Mini maestro 18Mini maestro 24

Tabla de contenido