Literate CoffeeScript version of sphero_collision example
This commit is contained in:
parent
da8e56ef9a
commit
ab547902b4
|
@ -0,0 +1,64 @@
|
||||||
|
# Sphero Collisions
|
||||||
|
|
||||||
|
For this Cylon example, we're going to set up a Sphero such that it will change
|
||||||
|
it's color and roll in a random direction when it has a collision.
|
||||||
|
|
||||||
|
Before we get started, make sure you have the `cylon-sphero` module installed.
|
||||||
|
|
||||||
|
First, let's load up Cylon:
|
||||||
|
|
||||||
|
Cylon = require '../..'
|
||||||
|
|
||||||
|
With that loaded, we can begin defining our robot.
|
||||||
|
|
||||||
|
Cylon.robot
|
||||||
|
|
||||||
|
We're going to have one connection, and one device for this robot, both the same
|
||||||
|
Sphero.
|
||||||
|
|
||||||
|
connection: { name: 'sphero', adaptor: 'sphero', port: '/dev/rfcomm0' }
|
||||||
|
device: { name: 'sphero', driver: 'sphero' }
|
||||||
|
|
||||||
|
With the necessary hardware defined, we can now start telling Cylon about the
|
||||||
|
work our robot will be performing.
|
||||||
|
|
||||||
|
work: (me) ->
|
||||||
|
|
||||||
|
We'll assign some variables here for later, a basic color for our sphero and
|
||||||
|
a variable we'll use for a bitwise math operation later.
|
||||||
|
|
||||||
|
color = 0x00FF00
|
||||||
|
bitFilter = 0xFFFF00
|
||||||
|
|
||||||
|
When our Sphero emits the 'connect' event, we're going to hook up collision
|
||||||
|
detection, make sure it's not moving, and set a color.
|
||||||
|
|
||||||
|
me.sphero.on 'connect', ->
|
||||||
|
Logger.info "Setting up Collision Detection..."
|
||||||
|
me.sphero.detectCollisions()
|
||||||
|
me.sphero.setRGB color
|
||||||
|
me.sphero.stop()
|
||||||
|
|
||||||
|
And when our Sphero detects a collision, we want to notify the user of this via
|
||||||
|
the console.
|
||||||
|
|
||||||
|
me.sphero.on 'collision', (data) ->
|
||||||
|
Logger.info "Collision:"
|
||||||
|
|
||||||
|
We get the new color for a Sphero by doing a bitwise XOR operation on it, using
|
||||||
|
the bitfilter above.
|
||||||
|
|
||||||
|
color = color ^ bitFilter
|
||||||
|
|
||||||
|
With our new color in hand, we can let the user know what color we're using now,
|
||||||
|
and change the Sphero to that color. We'll also tell the Sphero to roll in
|
||||||
|
a random direction, at speed 90.
|
||||||
|
|
||||||
|
Logger.info "Color: #{color.toString(16)} "
|
||||||
|
me.sphero.setRGB color
|
||||||
|
|
||||||
|
me.sphero.roll 90, Math.floor(Math.random() * 360)
|
||||||
|
|
||||||
|
And with all that said and done, we can now start the robot.
|
||||||
|
|
||||||
|
.start()
|
Loading…
Reference in New Issue