Controlling the servo with a potentiometer or another analog sensor is easy. However, what if we want to make some complex movements with servos?
On the patch board, you see servo-device
. This node defines a servo for the further usage: the port, minimum, and maximum pulse widths which correspond to the operating limits of the servo.
The servo-device
node links to nodes that work with servos: rotate-slow
in this example. The rotate-slow
node rotates the servo to the angle specified in VAL
with the RATE
speed when a DO
pulse is received. You may chain these nodes to make a sequential movement.
You may notice that rotate-slow
have MUX
pins. It’s another custom type called mutex
that allows only one node to act at the same time.
This program rotates the servo to the maximum angle slowly and then turn it back twice as fast on a button press. The button is ignored until rotation completes.
Upload the program and check it out.
↓ Download as a Fritzing project
Let’s change the servo trajectory.
rotate-slow
nodes.rotate-slow
.Press the button and see how the servo fulfills your order.
The xod-dev/servo
library also contains a rotate
node. The main difference between it and rotate-slow
that it rotates the servo immediately ignoring MUX
.
And if you wonder how the simple servo
node used in the previous chapter works: under the hood, it is a trivial composition of servo-device
and rotate
with a few terminals exposed to you. Simple nodes (also known as quickstart nodes) are enough for basic applications and when you need more, you use raw device nodes along with action nodes like you do in this chapter.
This idiom is applicable to other hardware as well.