Adding analog sensor support to cylon GPIO.

This commit is contained in:
Edgar O Silva 2013-10-29 17:56:57 -06:00
parent 46a0f38548
commit 2e0d0423bb
5 changed files with 43 additions and 12 deletions

9
dist/device.js vendored
View File

@ -35,7 +35,7 @@
this.name = opts.name;
this.pin = opts.pin;
this.connection = this.determineConnection(opts.connection) || this.defaultConnection();
this.driver = this.requireDriver(opts.driver);
this.driver = this.requireDriver(opts.driver, opts);
proxyFunctionsToObject(this.driver.commands(), this.driver, klass);
}
@ -66,9 +66,12 @@
return first;
};
Device.prototype.requireDriver = function(driverName) {
Device.prototype.requireDriver = function(driverName, opts) {
if (opts == null) {
opts = {};
}
Logger.debug("Loading driver '" + driverName + "'");
return this.robot.requireDriver(driverName, this.self);
return this.robot.requireDriver(driverName, this.self, opts);
};
return Device;

11
dist/robot.js vendored
View File

@ -157,19 +157,24 @@
return this.adaptors[adaptorName] = moduleName;
};
Robot.prototype.requireDriver = function(driverName, device) {
Robot.prototype.requireDriver = function(driverName, device, opts) {
if (opts == null) {
opts = {};
}
if (this.robot.drivers[driverName] != null) {
if (typeof this.robot.drivers[driverName] === 'string') {
this.robot.drivers[driverName] = require(this.robot.drivers[driverName]).driver({
name: driverName,
device: device
device: device,
extraParams: opts
});
}
} else {
require("cylon-" + driverName).register(this);
this.robot.drivers[driverName] = require("cylon-" + driverName).driver({
name: driverName,
device: device
device: device,
extraParams: opts
});
}
return this.robot.drivers[driverName];

View File

@ -0,0 +1,23 @@
Cylon = require('..')
# Initialize the robot
Cylon.robot
connection:
name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0'
devices:
[
{name: 'sensor', driver: 'analogSensor', pin: 0, upperLimit: 900, lowerLimit: 100},
]
work: (my) ->
#my.sensor.on('analogRead', (val) ->
# console.log("AnalogValue ===> #{ val }")
#)
my.sensor.on('upperLimit', (val) ->
console.log("Upper limit reached ===> #{ val }")
)
my.sensor.on('lowerLimit', (val) ->
console.log("Lower limit reached ===> #{ val }")
)
.start()

View File

@ -20,7 +20,7 @@ module.exports = class Device extends EventEmitter
@name = opts.name
@pin = opts.pin
@connection = @determineConnection(opts.connection) or @defaultConnection()
@driver = @requireDriver(opts.driver)
@driver = @requireDriver(opts.driver, opts)
proxyFunctionsToObject @driver.commands(), @driver, klass
start: (callback) =>
@ -38,6 +38,6 @@ module.exports = class Device extends EventEmitter
first or= v
first
requireDriver: (driverName) ->
requireDriver: (driverName, opts = {}) ->
Logger.debug "Loading driver '#{driverName}'"
@robot.requireDriver(driverName, @self)
@robot.requireDriver(driverName, @self, opts)

View File

@ -93,13 +93,13 @@ module.exports = class Robot
return if @adaptors[adaptorName]?
@adaptors[adaptorName] = moduleName
requireDriver: (driverName, device) ->
requireDriver: (driverName, device, opts = {}) ->
if @robot.drivers[driverName]?
if typeof @robot.drivers[driverName] is 'string'
@robot.drivers[driverName] = require(@robot.drivers[driverName]).driver(name: driverName, device: device)
@robot.drivers[driverName] = require(@robot.drivers[driverName]).driver(name: driverName, device: device, extraParams: opts)
else
require("cylon-#{driverName}").register(this)
@robot.drivers[driverName] = require("cylon-#{driverName}").driver(name: driverName, device: device)
@robot.drivers[driverName] = require("cylon-#{driverName}").driver(name: driverName, device: device, extraParams: opts)
return @robot.drivers[driverName]