UNPKG

johnny-five-electron

Version:

Temporary fork to support Electron (to be deprecated)

121 lines (94 loc) 2.56 kB
var Board = require("../lib/board.js"), Emitter = require("events").EventEmitter, util = require("util"), within = require("./mixins/within"), __ = require("./fn"); var priv = new Map(); /** * Ping * @param {Object} opts Options: pin */ function Ping(opts) { if (!(this instanceof Ping)) { return new Ping(opts); } var last = null; Board.Component.call( this, opts = Board.Options(opts) ); this.pin = opts && opts.pin || 7; this.freq = opts.freq || 20; // this.pulse = opts.pulse || 250; var state = { value: null }; // Private settings object var settings = { pin: this.pin, value: this.io.HIGH, pulseOut: 5 }; this.io.setMaxListeners(100); // Interval for polling pulse duration as reported in microseconds setInterval(function() { this.io.pingRead(settings, function(microseconds) { state.value = microseconds; }); }.bind(this), 225); // Interval for throttled event setInterval(function() { var err = null; if (state.value === null) { return; } // median = samples.sort()[samples.length / 2 | 0]; // if (!median) { // median = last; // } // @DEPRECATE this.emit("read", err, state.value); // The "read" event has been deprecated in // favor of a "data" event. this.emit("data", err, state.value); // If the state.value for this interval is not the same as the // state.value in the last interval, fire a "change" event. if (state.value !== last) { this.emit("change", err, state.value); } // Store state.value for comparison in next interval last = state.value; // Reset samples; // samples.length = 0; }.bind(this), this.freq); Object.defineProperties(this, { value: { get: function() { return state.value; } }, // Based on the round trip travel time in microseconds, // Calculate the distance in inches and centimeters inches: { get: function() { return +(state.value / 74 / 2).toFixed(2); } }, in: { get: function() { return this.inches; } }, cm: { get: function() { return +(state.value / 29 / 2).toFixed(3); } } }); priv.set(this, state); } util.inherits(Ping, Emitter); __.mixin(Ping.prototype, within); module.exports = Ping; //http://itp.nyu.edu/physcomp/Labs/Servo //http://arduinobasics.blogspot.com/2011/05/arduino-uno-flex-sensor-and-leds.html //http://protolab.pbworks.com/w/page/19403657/TutorialPings