Skip to content

Instantly share code, notes, and snippets.

@alexander-daniel
Created April 8, 2014 21:16
Show Gist options
  • Save alexander-daniel/10193757 to your computer and use it in GitHub Desktop.
Save alexander-daniel/10193757 to your computer and use it in GitHub Desktop.
sensors.js
var plotly = require('plotly')('streaming-demos','3yyglqsi85');
var five = require("johnny-five");
var board = new five.Board();
var EventEmitter = require('events').EventEmitter;
// plotly init data
var data = [
{x:[], y:[], stream:{token:'8xdfnkq1nb', maxpoints:210}, name: 'Device 1'},
{x:[], y:[], stream:{token:'xtndiqvpol', maxpoints:200}, name : 'Device 2'}];
var layout = {
fileopt : "overwrite",
layout: {
xaxis : {
showline : false,
zeroline : false,
ticks : ""
},
yaxis : {
autorange : false,
range : [-1,1],
showline : false,
zeroline : false,
ticks : ""
},
legend : {
x : 0,
y : 1,
bgcolor : 'rgba(189,189,189,0.2)',
bordercolor : "#FFFFFF",
borderwidth : 2,
traceorder : "normal",
font : {
color : "#000",
family : "Open Sans",
size : 14,
}
},
filename : "nodey arduino demo!"
}
};
// 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();
plotly.plot(data,layout,function (err, res) {
if (err) console.log(err);
console.log(res);
var stream = plotly.stream('8xdfnkq1nb', 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