/** LED blinking app for Intel Edison */
var n = 4 // number of LEDs [1,4]
, width = 130
, height = 105
, thickness = 45;
// for building the enclosure layout
var f3js = require('f3js')
, c = f3js.createContainer()
, rect = c.drawJointRectangle(0, 0, width, height)
, line = c.drawLine(30, height/2 - 5, width - 30, height/2 - 5);
// for blinking LEDs
var groveDriver = require('jsupm_grove')
, leds = [];
// use this line as the guide path
line.layout = { name: 'distribute', rotate: false };
for (var i = 0; i < n; i ++) {
var led = new groveDriver.GroveLed(i+2);
// put an LED module
var ledc = c.add(led, line);
// open a hole for the wire
ledc.drawRectangle(- 10, 15, 20, 10);
// start blinking the LED (details omitted)
leds.push(led);
setTimeout(function (l) { return function (){
l.handler = setInterval(blink(l), 1000);
} }(led), i * 100);
}
// make the specified LED blink (details omitted)
function blink(l) {
var led = l, on = false;
return function () {
led[on ? 'off' : 'on']();
on = !on;
};
}
// extrude the main panel to form a box shape
rect.jointHeight = 2;
var planes = rect.extrude(thickness);
// put side boards (details omitted)
{
// set some offset
c.x = 10; c.y = 10;
planes[0].x = 0;
planes[0].y = height + rect.jointHeight;
c.add(planes[0]);
planes[1].x = width;
planes[1].y = height + rect.jointHeight;
c.add(planes[1]);
planes[2].x = height;
planes[2].y = height + thickness + rect.jointHeight;
c.add(planes[2]);
planes[3].x = 0;
planes[3].y = height + thickness + rect.jointHeight;
c.add(planes[3]);
planes[4].x = width; planes[4].y = 0;
c.add(planes[4]);
// put a side hall
planes[3].drawRectangle(
5, thickness - rect.jointHeight - 15,
height - 10, 10);
}
// print message and register SIGINT handler (details omitted)
{
console.log('ready');
process.on('SIGINT', onExit);
// clean up before the death
function onExit() {
for (var i = 0; i < n; i ++) {
clearInterval(leds[i].handler);
leds[i].off();
}
}
}