1 get_position
dup 300 less_than
if
4000
# go to 4000 for values 0-299
else
dup 600 less_than
if
6000 # go to 6000 for values 300-599
else
8000 # go to 8000 for values 600-1023
endif
endif
0 servo
drop
# remove the original copy of the pot value
repeat
En el ejemplo anterior funciona, pero cuando el potenciómetro está cerca de 300 o 600, las
interferencias en la conversión AD pueden causar que el servo vibre. Una mejor manera de hacerlo
es con histéresis:
# Ajusta el servo a 4000,6000,8000 según la entrada analógica con hysteresis.
begin
4000 0 300 servo_range
6000 300 600 servo_range
8000 600 1023 servo_range
repeat
# usage: <pos> <low> <high> servo_range
# If the pot is in the range specified by low y high,
# keeps servo 0 at pos until the pot moves out of this
# range, with hysteresis.
sub servo_range
pot 2 pick less_than logical_not
pot 2 pick greater_than logical_not # <= high
logical_and
if
begin
pot 2 pick 10 minus less_than logical_not
pot 2 pick 10 plus greater_than logical_not # <= high + 10
logical_and
while
2 pick 0 servo
repeat
endif
drop drop drop
return
sub pot
1 get_position
return
En este ejemplo se utiliza un rango para decidir a dónde ir cuando hace una transición y luego
espera a que el servo haga un rango un poco más grande antes de hacer otra transición. Siempre y
cuando la diferencia (10 en este ejemplo) sea mayor que la cantidad de ruido, esto evitará los saltos.
Tenga en cuenta que este ejemplo sólo funciona si se conecta el potenciómetro a uno de los canales
de entrada analógicos capaces (canales 0-11). Las entradas en los otros canales son digitales.
Uso de un pulsador o de un interruptor para controlar servos
Es posible conectar un pulsador o un interruptor al Maestro y detectar su estado en el script. El
script siguiente mueve un servo a través de una secuencia predeterminada de movimientos,
avanzando a la siguiente etapa cada vez que pulsamos. Utilizamos el canal 0 para el pulsador y el
canal 1 para el servo. El canal del pulsador debe estar configurado como entrada y conectado
correctamente. ver la sección 7.b para las instrucciones de cómo realizar la conexión con una
resistencia de pull-up, con lo que la entrada estará en alto y al pulsar pasará a nivel bajo.
goto main_loop
# Esta rutina devuelve 1 si pulsas, 0 si no.
# Para covertir el valor de entrada (0-1023) a valor digital (0 o 1) que
# get the value of the pot, 0-1023
# Run the main loop when the script starts (see below).
# >= low
# >= low - 10
33