178 add litcoffee and js
This commit is contained in:
parent
07a7a2c137
commit
29101a2890
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'beaglebone',
|
||||
adaptor: 'beaglebone'
|
||||
},
|
||||
device: {
|
||||
name: 'led',
|
||||
driver: 'led',
|
||||
pin: 'P9_12'
|
||||
},
|
||||
work: function(my) {
|
||||
return every(1..second(), function() {
|
||||
return my.led.toggle();
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,30 @@
|
|||
# Beaglebone Blink
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
# Initialize the robot
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'beaglebone', adaptor: 'beaglebone'
|
||||
|
||||
device:
|
||||
name: 'led', driver: 'led', pin: 'P9_12'
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
# we do our thing here
|
||||
every 1.second(), -> my.led.toggle()
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'beaglebone',
|
||||
adaptor: 'beaglebone'
|
||||
},
|
||||
device: {
|
||||
name: 'pixel',
|
||||
driver: 'blinkm',
|
||||
pin: 'P9_20'
|
||||
},
|
||||
work: function(my) {
|
||||
var color;
|
||||
my.pixel.stopScript();
|
||||
my.pixel.goToRGB(255, 0, 0);
|
||||
my.pixel.fadeToRGB(0, 255, 0);
|
||||
my.pixel.fadeToHSB(100, 180, 90);
|
||||
my.pixel.fadeToRandomRGB(0, 0, 255);
|
||||
my.pixel.fadeToRandomHSB(100, 180, 90);
|
||||
my.pixel.playLightScript(1, 0, 0);
|
||||
my.pixel.stopScript();
|
||||
my.pixel.setFadeSpeed(50);
|
||||
my.pixel.setTimeAdjust(50);
|
||||
color = my.pixel.getRGBColor();
|
||||
if (typeof err === "undefined" || err === null) {
|
||||
console.log(color);
|
||||
}
|
||||
return my.pixel.getRGBColor(function(err, data) {
|
||||
if (err == null) {
|
||||
return console.log(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,53 @@
|
|||
# Beaglebone BlinkM
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'beaglebone', adaptor: 'beaglebone'
|
||||
|
||||
device:
|
||||
name: 'pixel', driver: 'blinkm', pin: 'P9_20'
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
# we do our thing here
|
||||
my.pixel.stopScript()
|
||||
# You can pass a callback to all blinkm functions as the last param,
|
||||
# If you do the command would be executed asynchronously.
|
||||
# For write operations you get an (err) param passed back,
|
||||
# null/undefined for success, and containing the error y any encountered.
|
||||
#
|
||||
# Write BlimkM commands.
|
||||
my.pixel.goToRGB(255, 0, 0)
|
||||
my.pixel.fadeToRGB(0, 255, 0)
|
||||
my.pixel.fadeToHSB(100, 180, 90)
|
||||
my.pixel.fadeToRandomRGB(0, 0, 255)
|
||||
my.pixel.fadeToRandomHSB(100, 180, 90)
|
||||
my.pixel.playLightScript(1, 0, 0)
|
||||
my.pixel.stopScript()
|
||||
my.pixel.setFadeSpeed(50)
|
||||
my.pixel.setTimeAdjust(50)
|
||||
# For read commands you get (err, data) passed back to the callback,
|
||||
# data contains the read data buffer, in case of Sync call (no callback)
|
||||
# you get a regular return.
|
||||
color = my.pixel.getRGBColor()
|
||||
console.log(color) unless err?
|
||||
# Example getting the color usinc async call and a callback
|
||||
my.pixel.getRGBColor((err, data) ->
|
||||
console.log(data) unless err?
|
||||
)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
Binary file not shown.
|
@ -0,0 +1,24 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'beaglebone',
|
||||
adaptor: 'beaglebone'
|
||||
},
|
||||
devices: [
|
||||
{
|
||||
name: 'led',
|
||||
driver: 'led',
|
||||
pin: 'P9_12'
|
||||
}, {
|
||||
name: 'button',
|
||||
driver: 'button',
|
||||
pin: 'P9_14'
|
||||
}
|
||||
],
|
||||
work: function(my) {
|
||||
return my.button.on('push', function() {
|
||||
return my.led.toggle();
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,32 @@
|
|||
# Beaglebone Button
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
# Initialize the robot
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'beaglebone', adaptor: 'beaglebone'
|
||||
|
||||
devices:
|
||||
[
|
||||
{name: 'led', driver: 'led', pin: 'P9_12'},
|
||||
{name: 'button', driver: 'button', pin: 'P9_14'}
|
||||
]
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
my.button.on 'push', () -> my.led.toggle()
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
Binary file not shown.
|
@ -0,0 +1,25 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'beaglebone',
|
||||
adaptor: 'beaglebone'
|
||||
},
|
||||
device: {
|
||||
name: 'led',
|
||||
driver: 'led',
|
||||
pin: 'P9_14'
|
||||
},
|
||||
work: function(my) {
|
||||
var brightness, fade;
|
||||
brightness = 0;
|
||||
fade = 5;
|
||||
return every(0.05.seconds(), function() {
|
||||
brightness += fade;
|
||||
my.led.brightness(brightness);
|
||||
if ((brightness === 0) || (brightness === 255)) {
|
||||
return fade = -fade;
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,32 @@
|
|||
# Beaglebone Led Brightness
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
# Initialize the robot
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection: { name: 'beaglebone', adaptor: 'beaglebone' }
|
||||
device: { name: 'led', driver: 'led', pin: 'P9_14' }
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
# we do our thing here
|
||||
brightness = 0
|
||||
fade = 5
|
||||
every 0.05.seconds(), ->
|
||||
brightness += fade
|
||||
my.led.brightness(brightness)
|
||||
fade = -fade if (brightness is 0) or (brightness is 255)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
Binary file not shown.
|
@ -0,0 +1,26 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'beaglebone',
|
||||
adaptor: 'beaglebone'
|
||||
},
|
||||
device: {
|
||||
name: 'servo',
|
||||
driver: 'servo',
|
||||
pin: 'P9_14'
|
||||
},
|
||||
work: function(my) {
|
||||
var angle, increment;
|
||||
angle = 30;
|
||||
increment = 40;
|
||||
return every(1..seconds(), function() {
|
||||
angle += increment;
|
||||
my.servo.angle(angle);
|
||||
console.log("Current Angle: " + (my.servo.currentAngle()));
|
||||
if ((angle === 30) || (angle === 150)) {
|
||||
return increment = -increment;
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,50 @@
|
|||
# Beaglebone Servo
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection: { name: 'beaglebone', adaptor: 'beaglebone' }
|
||||
device: { name: 'servo', driver: 'servo', pin: 'P9_14' }
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do
|
||||
|
||||
work: (my) ->
|
||||
|
||||
# Be carefull with your servo angles or you might DAMAGE the servo!
|
||||
# Cylon uses a 50hz/s (20ms period) frequency and a Duty Cycle
|
||||
# of 0.5ms to 2.5ms to control the servo angle movement.
|
||||
#
|
||||
# This means:
|
||||
# 1. 0.5ms == 0 degrees
|
||||
# 2. 1.5ms == 90 degrees
|
||||
# 3. 2.5ms == 180 degrees
|
||||
# (It is usually safe to start with a 90 degree angle, 1.5ms duty
|
||||
# cycle in most servos)
|
||||
#
|
||||
# Please review your servo datasheet to make sure of correct
|
||||
# angle range and the Freq/MS Duty cycle it requires.
|
||||
# If more servo support is needed leave us a comment, raise an
|
||||
# issue or help us add more support.
|
||||
angle = 30
|
||||
increment = 40
|
||||
|
||||
every 1.seconds(), ->
|
||||
angle += increment
|
||||
my.servo.angle angle
|
||||
|
||||
console.log "Current Angle: #{my.servo.currentAngle()}"
|
||||
|
||||
increment = -increment if (angle is 30) or (angle is 150)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
|
@ -0,0 +1,18 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'digispark',
|
||||
adaptor: 'digispark'
|
||||
},
|
||||
device: {
|
||||
name: 'led',
|
||||
driver: 'led',
|
||||
pin: 1
|
||||
},
|
||||
work: function(my) {
|
||||
return every(1..second(), function() {
|
||||
return my.led.toggle();
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,28 @@
|
|||
# Digispark Blink
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
# Initialize the robot
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection: { name: 'digispark', adaptor: 'digispark'}
|
||||
|
||||
device: { name: 'led', driver: 'led', pin: 1 }
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
|
||||
every 1.second(), -> my.led.toggle()
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
|
@ -0,0 +1,33 @@
|
|||
# Leapmotion Arduino
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connections: [
|
||||
{ name: 'leapmotion', adaptor: 'leapmotion', port: '127.0.0.1:6437' },
|
||||
{ name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0' }
|
||||
]
|
||||
|
||||
devices: [
|
||||
{ name: 'leapmotion', driver: 'leapmotion', connection: 'leapmotion' },
|
||||
{ name: 'led', driver: 'led', pin: 13, connection: 'arduino' }
|
||||
]
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
my.leapmotion.on 'frame', (frame) ->
|
||||
if (frame.hands.length > 0) then my.led.turnOn() else my.led.turnOff()
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
|
@ -0,0 +1,31 @@
|
|||
# MPL115A2
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0'
|
||||
|
||||
device:
|
||||
name: 'mpl115a2', driver: 'mpl115a2'
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
my.mpl115a2.on 'start', ->
|
||||
my.mpl115a2.getTemperature((data) ->
|
||||
Logger.info "temperature #{data['temperature']}, pressure #{data['pressure']}"
|
||||
)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
Binary file not shown.
|
@ -0,0 +1,29 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'opencv',
|
||||
adaptor: 'opencv'
|
||||
},
|
||||
devices: [
|
||||
{
|
||||
name: 'window',
|
||||
driver: 'window'
|
||||
}, {
|
||||
name: 'camera',
|
||||
driver: 'camera',
|
||||
camera: 1,
|
||||
haarcascade: "" + __dirname + "/examples/opencv/haarcascade_frontalface_alt.xml"
|
||||
}
|
||||
],
|
||||
work: function(my) {
|
||||
return my.camera.once('cameraReady', function() {
|
||||
console.log('The camera is ready!');
|
||||
my.camera.on('frameReady', function(err, im) {
|
||||
console.log("FRAMEREADY!");
|
||||
return my.window.show(im, 40);
|
||||
});
|
||||
return every(50, my.camera.readFrame);
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,60 @@
|
|||
# Display Camera
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'opencv', adaptor: 'opencv'
|
||||
|
||||
devices: [
|
||||
{ name: 'window', driver: 'window' }
|
||||
{
|
||||
name: 'camera',
|
||||
driver: 'camera',
|
||||
camera: 1,
|
||||
haarcascade: "#{ __dirname }/examples/opencv/haarcascade_frontalface_alt.xml"
|
||||
} # Default camera is 0
|
||||
]
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
my.camera.once('cameraReady', ->
|
||||
console.log('The camera is ready!')
|
||||
# We listen for frame ready event, when triggered
|
||||
# we display the frame/image passed as an argument
|
||||
# and we tell the window to wait 40 milliseconds
|
||||
my.camera.on('frameReady', (err, im) ->
|
||||
console.log("FRAMEREADY!")
|
||||
my.window.show(im, 40)
|
||||
#my.camera.readFrame()
|
||||
)
|
||||
# Here we have two options to start reading frames from
|
||||
# the camera feed.
|
||||
# 1. As fast as possible triggering the next frame read
|
||||
# in the listener for frameReady, if you need video
|
||||
# as smooth as possible uncomment #my.camera.readFrame()
|
||||
# in the listener above and the one below this comment.
|
||||
#
|
||||
# my.camera.readFrame()
|
||||
#
|
||||
# 2. Use an interval of time to try and get aset amount
|
||||
# of frames per second (FPS), in the next example
|
||||
# we are trying to get 1 frame every 50 milliseconds
|
||||
# (20 FPS).
|
||||
#
|
||||
every 50, my.camera.readFrame
|
||||
)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
Binary file not shown.
|
@ -0,0 +1,27 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'opencv',
|
||||
adaptor: 'opencv'
|
||||
},
|
||||
devices: [
|
||||
{
|
||||
name: 'window',
|
||||
driver: 'window'
|
||||
}, {
|
||||
name: 'camera',
|
||||
driver: 'camera',
|
||||
camera: 1
|
||||
}
|
||||
],
|
||||
work: function(my) {
|
||||
return my.camera.on('cameraReady', function() {
|
||||
console.log('THE CAMERA IS READY!');
|
||||
my.camera.on('frameReady', function(err, im) {
|
||||
return my.window.show(im, 5000);
|
||||
});
|
||||
return my.camera.readFrame();
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,36 @@
|
|||
# Display Image from Camera
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'opencv', adaptor: 'opencv'
|
||||
|
||||
devices: [
|
||||
{ name: 'window', driver: 'window' }
|
||||
{ name: 'camera', driver: 'camera', camera: 1 }
|
||||
]
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
my.camera.on('cameraReady', ->
|
||||
console.log('THE CAMERA IS READY!')
|
||||
my.camera.on('frameReady', (err, im) ->
|
||||
my.window.show(im, 5000)
|
||||
)
|
||||
my.camera.readFrame()
|
||||
)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -0,0 +1,37 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'opencv',
|
||||
adaptor: 'opencv'
|
||||
},
|
||||
devices: [
|
||||
{
|
||||
name: 'window',
|
||||
driver: 'window'
|
||||
}, {
|
||||
name: 'camera',
|
||||
driver: 'camera',
|
||||
camera: 1,
|
||||
haarcascade: "" + __dirname + "/haarcascade_frontalface_alt.xml"
|
||||
}
|
||||
],
|
||||
work: function(my) {
|
||||
return my.camera.once('cameraReady', function() {
|
||||
console.log('The camera is ready!');
|
||||
my.camera.on('facesDetected', function(err, im, faces) {
|
||||
var face, _i, _len;
|
||||
for (_i = 0, _len = faces.length; _i < _len; _i++) {
|
||||
face = faces[_i];
|
||||
im.rectangle([face.x, face.y], [face.x + face.width, face.y + face.height], [0, 255, 0], 2);
|
||||
}
|
||||
my.window.show(im, 40);
|
||||
return my.camera.readFrame();
|
||||
});
|
||||
my.camera.on('frameReady', function(err, im) {
|
||||
return my.camera.detectFaces(im);
|
||||
});
|
||||
return my.camera.readFrame();
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,74 @@
|
|||
# Face Detection
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'opencv', adaptor: 'opencv'
|
||||
|
||||
devices: [
|
||||
{ name: 'window', driver: 'window' }
|
||||
{
|
||||
name: 'camera',
|
||||
driver: 'camera',
|
||||
camera: 1,
|
||||
haarcascade: "#{ __dirname }/haarcascade_frontalface_alt.xml"
|
||||
} # Default camera is 0
|
||||
]
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
# We setup our face detection once the camera is ready to
|
||||
# siplays images, we used once to make sure the event listeners
|
||||
# are only registered once.
|
||||
my.camera.once('cameraReady', ->
|
||||
console.log('The camera is ready!')
|
||||
# We add a listener for the facesDetected event
|
||||
# here we will get (err, image/frame, faces) params.
|
||||
# The faces param is an array conaining any face detected
|
||||
# in the frame (im).
|
||||
my.camera.on('facesDetected', (err, im, faces) ->
|
||||
# We loop trhough the faces and manipulate the image
|
||||
# to display a square in the coordinates for the detected
|
||||
# faces.
|
||||
for face in faces
|
||||
im.rectangle([face.x, face.y], [face.x + face.width, face.y + face.height], [0,255,0], 2)
|
||||
# Once the image has been updated with rectangles around
|
||||
# detected faces we display it in our window.
|
||||
my.window.show(im, 40)
|
||||
|
||||
# After displaying the updated image we trigger another
|
||||
# frame read to ensure the fastest processing possible.
|
||||
# We could also use an interval to try and get a set
|
||||
# amount of processed frames per second, see below.
|
||||
my.camera.readFrame()
|
||||
)
|
||||
# We listen for frameReady event, when triggered
|
||||
# we start the face detection passsing the frame
|
||||
# that we jsut got.
|
||||
my.camera.on('frameReady', (err, im) ->
|
||||
my.camera.detectFaces(im)
|
||||
)
|
||||
|
||||
# Here we could also try to get a set amount of processed FPS
|
||||
# by setting an interval and reading frames every set amount
|
||||
# of time. We could just uncomment the next line and commenting
|
||||
# out the my.camera.readFrame() in the facesDetected listener
|
||||
# as well as the one two lines below.
|
||||
#every 150, my.camera.readFrame
|
||||
my.camera.readFrame()
|
||||
)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,26 @@
|
|||
var Cylon = require('../..');
|
||||
|
||||
Cylon.robot({
|
||||
connection: {
|
||||
name: 'raspi',
|
||||
adaptor: 'raspi'
|
||||
},
|
||||
device: {
|
||||
name: 'pixel',
|
||||
driver: 'blinkm'
|
||||
},
|
||||
work: function(my) {
|
||||
var color;
|
||||
my.pixel.stopScript();
|
||||
my.pixel.goToRGB(255, 0, 0);
|
||||
my.pixel.fadeToRGB(0, 255, 0);
|
||||
my.pixel.fadeToRGB(0, 0, 255);
|
||||
color = my.pixel.getRGBColor();
|
||||
console.log(color);
|
||||
return my.pixel.getRGBColor(function(err, data) {
|
||||
if (err == null) {
|
||||
return console.log(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
}).start();
|
|
@ -0,0 +1,63 @@
|
|||
# Raspberry Pi BlinkM
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require('../..')
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'raspi', adaptor: 'raspi'
|
||||
|
||||
device:
|
||||
name: 'pixel', driver: 'blinkm'
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
|
||||
# Before you can use and work with I2C in the raspberry pi you
|
||||
# need to configure it, follow the instructions to enable it here:
|
||||
#
|
||||
# http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c
|
||||
|
||||
# We first stop the BlinkM light script
|
||||
my.pixel.stopScript()
|
||||
|
||||
# You can pass a callback to all blinkm functions as the last param,
|
||||
# If you do the command would be executed asynchronously.
|
||||
# For write operations you get an (err) param passed back,
|
||||
# null/undefined for success, and containing the error y any encountered.
|
||||
|
||||
# BlimkM Write Commands.
|
||||
my.pixel.goToRGB(255, 0, 0)
|
||||
my.pixel.fadeToRGB(0, 255, 0)
|
||||
my.pixel.fadeToRGB(0, 0, 255)
|
||||
#my.pixel.fadeToHSB(100, 180, 90)
|
||||
#my.pixel.fadeToRandomRGB(0, 0, 255)
|
||||
#my.pixel.fadeToRandomHSB(100, 180, 90)
|
||||
#my.pixel.playLightScript(1, 0, 0)
|
||||
#my.pixel.stopScript()
|
||||
#my.pixel.setFadeSpeed(50)
|
||||
#my.pixel.setTimeAdjust(50)
|
||||
|
||||
# For read commands you get (err, data) passed back to the callback,
|
||||
# data contains the read data buffer, in case of Sync call (no callback)
|
||||
# you get a regular return with the data buffer.
|
||||
color = my.pixel.getRGBColor()
|
||||
console.log(color)
|
||||
|
||||
# Example getting the color usinc async call and a callback
|
||||
my.pixel.getRGBColor((err, data) ->
|
||||
console.log(data) unless err?
|
||||
)
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
|
@ -0,0 +1,46 @@
|
|||
# Sales Force
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'sfcon'
|
||||
adaptor: 'force'
|
||||
sfuser: process.env.SF_USERNAME
|
||||
sfpass: process.env.SF_SECURITY_TOKEN
|
||||
orgCreds:
|
||||
clientId: process.env.SF_CLIENT_ID
|
||||
clientSecret: process.env.SF_CLIENT_SECRET
|
||||
redirectUri: 'http://localhost:3000/oauth/_callback'
|
||||
|
||||
device: { name: 'salesforce', driver: 'force' }
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (me) ->
|
||||
me.salesforce.on 'start', () ->
|
||||
me.salesforce.subscribe '/topic/SpheroMsgOutbound', (data) ->
|
||||
msg = "Sphero: #{data.sobject.Sphero_Name__c},"
|
||||
msg += "Bucks: #{data.sobject.Bucks__c},"
|
||||
msg += "SM_Id: #{data.sobject.Id}"
|
||||
|
||||
console.log msg
|
||||
|
||||
i = 0
|
||||
|
||||
every 2.seconds(), () ->
|
||||
data = JSON.stringify { spheroName: "#{me.name}", bucks: "#{i}" }
|
||||
me.salesforce.push 'SpheroController', 'POST', data
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
|
@ -0,0 +1,51 @@
|
|||
# Sales force Client
|
||||
|
||||
'use strict'
|
||||
|
||||
namespace = require 'node-namespace'
|
||||
nforce = require 'nforce'
|
||||
Faye = require 'faye'
|
||||
|
||||
namespace 'SF', ->
|
||||
class @SFClient
|
||||
constructor: (opts) ->
|
||||
@client = null
|
||||
@outboundMessages = []
|
||||
@sfuser = opts.sfuserjeje ok
|
||||
|
||||
@sfpass = opts.sfpass
|
||||
@orgCreds = opts.orgCredentials
|
||||
@org = nforce.createConnection @orgCreds
|
||||
|
||||
_processOutboundMessages: () ->
|
||||
# Do work here
|
||||
|
||||
_handleStreamingAPI: (outboundCB) ->
|
||||
client = new Faye.Client("#{@oauth.instance_url}/cometd/28.0")
|
||||
client.setHeader "Authorization", "OAuth #{@oauth.access_token}"
|
||||
|
||||
subscription = client.subscribe '/topic/SpheroMsgOutbound', outboundCB
|
||||
console.log "Streaming API Connected..."
|
||||
|
||||
authenticate: (outboundCB) ->
|
||||
@org.authenticate {username: @sfuser, password: @sfpass}, (err, _oauth) =>
|
||||
if err
|
||||
console.log 'unable to authenticate to sfdc'
|
||||
console.log err
|
||||
process.exit 1
|
||||
else
|
||||
console.log "authenticated"
|
||||
@oauth = _oauth
|
||||
@_handleStreamingAPI outboundCB
|
||||
@_processOutboundMessages()
|
||||
|
||||
push: (msg) ->
|
||||
jsonString = msg
|
||||
|
||||
console.log "SpheroController post msg:"
|
||||
console.log msg
|
||||
|
||||
methodData = {uri:'SpheroController', method: 'POST', body: jsonString}
|
||||
|
||||
@org.apexRest methodData, @oauth, (err, resp) =>
|
||||
console.log if err then err else resp
|
|
@ -0,0 +1,82 @@
|
|||
# Sales Force Shpero
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
class SalesforceRobot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'sfcon'
|
||||
adaptor: 'force'
|
||||
sfuser: process.env.SF_USERNAME
|
||||
sfpass: process.env.SF_SECURITY_TOKEN
|
||||
orgCreds:
|
||||
clientId: process.env.SF_CLIENT_ID
|
||||
clientSecret: process.env.SF_CLIENT_SECRET
|
||||
redirectUri: 'http://localhost:3000/oauth/_callback'
|
||||
|
||||
device: { name: 'salesforce', driver: 'force' }
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (me) ->
|
||||
me.salesforce.on 'start', () ->
|
||||
me.salesforce.subscribe '/topic/SpheroMsgOutbound', (data) ->
|
||||
msg = "Sphero: #{data.sobject.Sphero_Name__c},"
|
||||
msg += "Bucks: #{data.sobject.Bucks__c},"
|
||||
msg += "SM_Id: #{data.sobject.Id}"
|
||||
|
||||
console.log msg
|
||||
|
||||
me.master.findRobot data.sobject.Sphero_Name__c, (err, spheroBot) ->
|
||||
spheroBot.react spheroBot.devices.sphero
|
||||
|
||||
class SpheroRobot
|
||||
totalBucks: 0
|
||||
|
||||
connection: { name: 'sphero', adaptor: 'sphero' }
|
||||
|
||||
device: { name: 'sphero', driver: 'sphero' }
|
||||
|
||||
react: (robot) =>
|
||||
robot.setRGB 0x00FF00
|
||||
robot.roll 90, Math.floor(Math.random() * 360)
|
||||
|
||||
work: (me) ->
|
||||
me.sphero.on 'connect', ->
|
||||
console.log 'Setting up Collision Detection...'
|
||||
me.sphero.detectCollisions()
|
||||
me.sphero.stop()
|
||||
me.sphero.setRGB 0x00FF00
|
||||
me.sphero.roll 90, Math.floor(Math.random() * 360)
|
||||
|
||||
me.sphero.on 'collision', (data) ->
|
||||
me.sphero.setRGB 0x0000FF, me
|
||||
me.sphero.stop()
|
||||
|
||||
data = JSON.stringify
|
||||
spheroName: "#{me.name}"
|
||||
bucks: "#{me.totalBucks++}"
|
||||
|
||||
me.master.findRobot 'salesforce', (err, sf) ->
|
||||
sf.devices.salesforce.push 'SpheroController', 'POST', data
|
||||
|
||||
sfRobot = new SalesforceRobot()
|
||||
sfRobot.name = "salesforce"
|
||||
Cylon.robot sfRobot
|
||||
|
||||
spheroRobot = new SpheroRobot()
|
||||
spheroRobot.name = 'ROY'
|
||||
spheroRobot.connection.port = '/dev/rfcomm0'
|
||||
Cylon.robot spheroRobot
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
Cylon.start()
|
|
@ -0,0 +1,38 @@
|
|||
# Sales Force Test
|
||||
|
||||
require '../examples/sf-client'
|
||||
|
||||
sfuser = process.env.SF_USERNAME
|
||||
sfpass = process.env.SF_SECURITY_TOKEN
|
||||
|
||||
orgCreds =
|
||||
clientId: process.env.SF_CLIENT_ID
|
||||
clientSecret: process.env.SF_CLIENT_SECRET
|
||||
redirectUri: 'http://localhost:3000/oauth/_callback'
|
||||
|
||||
sf = new Cylon.SF.SFClient
|
||||
sfuser: sfuser
|
||||
sfpass: sfpass
|
||||
orgCredentials: orgCreds
|
||||
|
||||
cc = 0
|
||||
|
||||
sf.authenticate (msg) ->
|
||||
string = "^ Sphero Name: #{msg.sobject.Sphero_Name__c},"
|
||||
string += " Msg Content:#{ msg.sobject.Content__c }"
|
||||
string += ", SM Id:#{ msg.sobject.Id }"
|
||||
console.log "Printed from callback in client program.program"
|
||||
console.log string + "\n"
|
||||
|
||||
myId = null
|
||||
message = "hello"
|
||||
detail = "Some Stuff for details"
|
||||
|
||||
setInterval () =>
|
||||
cc++
|
||||
myId = cc
|
||||
|
||||
data = JSON.stringify { identifier: "run3#{myId}", msg: message }
|
||||
|
||||
sf.push data
|
||||
, 1000
|
|
@ -0,0 +1,39 @@
|
|||
# Skynet Blink
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our robot
|
||||
|
||||
Cylon.robot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connections: [
|
||||
{ name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0' },
|
||||
# { name: 'skynet', adaptor: 'skynet', uuid: "742401f1-87a4-11e3-834d-670dadc0ddbf", token: "xjq9h3yzhemf5hfrme8y08fh0sm50zfr" }
|
||||
{ name: 'skynet', adaptor: 'skynet', host: 'localhost', portNumber: 3000, uuid: "18676eb1-9997-11e3-8c2a-f18a07a72684", token: "vbeo289aik65hfr1lns8vst273nmi" }
|
||||
]
|
||||
|
||||
device: { name: 'led', driver: 'led', pin: 13, connection: 'arduino' }
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (my) ->
|
||||
Logger.info "connected..."
|
||||
my.connections['skynet'].on 'message', (channel, data) ->
|
||||
console.log(data)
|
||||
data = JSON.parse(data)
|
||||
if data.red is 'on'
|
||||
console.log("red on request received from skynet");
|
||||
my.led.turnOn()
|
||||
else if data.red is 'off'
|
||||
console.log("red off request received from skynet");
|
||||
my.led.turnOff()
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
.start()
|
|
@ -0,0 +1,150 @@
|
|||
# Sphero Pebble Sales Force
|
||||
|
||||
First, let's import Cylon:
|
||||
|
||||
Cylon = require '../..'
|
||||
|
||||
Next up, we'll configure the API Cylon will serve, telling it to serve on port
|
||||
`8080`.
|
||||
|
||||
Cylon.api host: '0.0.0.0', port: '8080'
|
||||
|
||||
Now that we have Cylon imported, we can start defining our pebble robot
|
||||
|
||||
class PebbleRobot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection: { name: 'pebble', adaptor: 'pebble' }
|
||||
device: { name: 'pebble', driver: 'pebble' }
|
||||
|
||||
message: (robot, msg) =>
|
||||
robot.message_queue().push(msg)
|
||||
|
||||
Now that Cylon knows about the necessary hardware we're going to be using, we'll
|
||||
tell it what work we want to do:
|
||||
|
||||
work: (me) ->
|
||||
me.pebble.on 'connect', -> console.log "Connected!"
|
||||
|
||||
Let's define our Sales Force robot
|
||||
|
||||
class SalesforceRobot
|
||||
|
||||
Let's define the connections and devices:
|
||||
|
||||
connection:
|
||||
name: 'sfcon'
|
||||
adaptor: 'force'
|
||||
sfuser: process.env.SF_USERNAME
|
||||
sfpass: process.env.SF_SECURITY_TOKEN
|
||||
orgCreds:
|
||||
clientId: process.env.SF_CLIENT_ID
|
||||
clientSecret: process.env.SF_CLIENT_SECRET
|
||||
redirectUri: 'http://localhost:3000/oauth/_callback'
|
||||
|
||||
device: { name: 'salesforce', driver: 'force' }
|
||||
|
||||
spheroReport: {}
|
||||
|
||||
Tell it what work we want to do:
|
||||
|
||||
work: (me) ->
|
||||
me.salesforce.on 'start', () ->
|
||||
me.salesforce.subscribe '/topic/SpheroMsgOutbound', (data) ->
|
||||
name = data.sobject.Sphero_Name__c
|
||||
bucks = data.sobject.Bucks__c
|
||||
|
||||
msg = "Sphero: #{name},"
|
||||
msg += "data Bucks: #{bucks},"
|
||||
msg += "SM_Id: #{data.sobject.Id}"
|
||||
|
||||
console.log msg
|
||||
|
||||
me.master.findRobot name, (err, spheroBot) ->
|
||||
spheroBot.react spheroBot.devices.sphero
|
||||
|
||||
me.spheroReport[name] = bucks
|
||||
|
||||
toPebble = ""
|
||||
toPebble += "#{key}: $#{val}\n" for key, val of me.spheroReport
|
||||
|
||||
me.master.findRobot 'pebble', (error, pebbleBot) ->
|
||||
pebbleBot.message pebbleBot.devices.pebble, toPebble
|
||||
|
||||
Let's define our Sphero robot
|
||||
|
||||
class SpheroRobot
|
||||
totalBucks: 1
|
||||
payingPower: true
|
||||
|
||||
connection: { name: 'sphero', adaptor: 'sphero' }
|
||||
|
||||
device: { name: 'sphero', driver: 'sphero' }
|
||||
|
||||
react: (device) ->
|
||||
device.setRGB 0x00FF00
|
||||
device.roll 90, Math.floor(Math.random() * 360)
|
||||
@payingPower = true
|
||||
|
||||
bankrupt: () ->
|
||||
every 3.seconds(), () =>
|
||||
if @payingPower and @totalBucks > 0
|
||||
@totalBucks += -1
|
||||
if @totalBucks is 0
|
||||
@sphero.setRGB 0xFF000
|
||||
@sphero.stop()
|
||||
|
||||
changeDirection: () ->
|
||||
every 1.seconds(), () =>
|
||||
@sphero.roll 90, Math.floor(Math.random() * 360) if @payingPower
|
||||
|
||||
Tell it what work we want to do:
|
||||
|
||||
work: (me) ->
|
||||
|
||||
me.sphero.on 'connect', ->
|
||||
console.log 'Setting up Collision Detection...'
|
||||
me.sphero.detectCollisions()
|
||||
me.sphero.stop()
|
||||
me.sphero.setRGB 0x00FF00
|
||||
me.sphero.roll 90, Math.floor(Math.random() * 360)
|
||||
me.bankrupt()
|
||||
me.changeDirection()
|
||||
|
||||
me.sphero.on 'collision', (data) ->
|
||||
me.sphero.setRGB 0x0000FF
|
||||
me.sphero.stop()
|
||||
me.payingPower = false
|
||||
|
||||
data = JSON.stringify
|
||||
spheroName: "#{me.name}",
|
||||
bucks: "#{me.totalBucks++}"
|
||||
|
||||
me.master.findRobot 'salesforce', (err, sf) ->
|
||||
sf.devices.salesforce.push "SpheroController", "POST", data
|
||||
|
||||
salesforceRobot = new SalesforceRobot()
|
||||
salesforceRobot.name = "salesforce"
|
||||
Cylon.robot salesforceRobot
|
||||
|
||||
pebbleRobot = new PebbleRobot()
|
||||
pebbleRobot.name = "pebble"
|
||||
Cylon.robot pebbleRobot
|
||||
|
||||
bots = [
|
||||
{ port: '/dev/tty.Sphero-ROY-AMP-SPP', name: 'ROY' },
|
||||
{ port: '/dev/tty.Sphero-GBO-AMP-SPP', name: 'GBO'},
|
||||
{ port: '/dev/tty.Sphero-RRY-AMP-SPP', name: 'RRY'}
|
||||
]
|
||||
|
||||
for bot in bots
|
||||
robot = new SpheroRobot
|
||||
robot.connection.port = bot.port
|
||||
robot.name = bot.name
|
||||
Cylon.robot robot
|
||||
|
||||
Now that our robot knows what work to do, and the work it will be doing that
|
||||
hardware with, we can start it:
|
||||
|
||||
Cylon.start()
|
Loading…
Reference in New Issue