Skip to content

Instantly share code, notes, and snippets.

@alexander-daniel
Created April 8, 2014 21:16
Show Gist options
  • Save alexander-daniel/10193813 to your computer and use it in GitHub Desktop.
Save alexander-daniel/10193813 to your computer and use it in GitHub Desktop.
sensor-slave.js
var plotly = require('plotly')('streaming-demos','3yyglqsi85');
var five = require("johnny-five");
var board = new five.Board();
var EventEmitter = require('events').EventEmitter;
// lets do this
board.on("ready", function () {
var photoresistor = new five.Sensor({ pin: "A0", freq: 50, threshold: 100 });
var potentiometer = new five.Sensor({ pin: "A5", freq: 50, threshold: 100 });
var sinner = SinBox();
console.log('ready');
var stream = plotly.stream('xtndiqvpol', function (err, res) {
if (err) console.log(err);
console.log(res);
});
potentiometer.scale([ 0, 4000 ]).on("data", function () {
var freq = this.value/1000;
sinner.setFrequency(freq);
});
photoresistor.scale([ 0, 1 ]).on("data", function () {
sinner.setAmplitude(this.value);
});
sinner.on('data', function (data) {
//console.log(data);
stream.write(JSON.stringify(data)+'\n');
});
});
// little helper function to get a nicely formatted date string
function getDateString () {
var time = new Date();
var datestr = new Date(time - 14400000).toISOString().replace(/T/, ' ').replace(/Z/, '');
return datestr;
}
function SinBox () {
var self = new EventEmitter();
self.freq = 0; // should be between 200ms and 4 seconds?
self.amp = 0; // should be between 0 and 1
self.start = Date.now();
self.switcher = 0;
self.setAmplitude = function (amp) {
self.amp = amp;
self.switcher = !self.switcher;
if (self.switcher)
self.computeSignal();
};
self.setFrequency = function (freq) {
self.freq = freq;
self.switcher = !self.switcher;
if (self.switcher)
self.computeSignal();
};
self.computeSignal = function () {
var now = Date.now();
var ts = (now - self.start) / 1000;
var x = new Date(now - 14400000).toISOString().replace(/T/, ' ').replace(/Z/, '');
var y = self.amp * Math.sin(self.freq * ts);
self.emit('data', {x:x, y:y} );
};
return self;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment