(function(){ "use strict"; function Led(pin){ return { on: function(){ pin.output(1); }, off: function(){ pin.output(0); } }; } function LedFlasher(led){ var VSLOW = 1000; var SLOW = 666; var MODERATE = 333; var FAST = 100; var fTimer = null; function flashing(rate){ console.log("Flashing: ", rate); if (null === state){ led.off(); state = false; } if (fTimer !== null){ clearInterval(fTimer); } fTimer = setInterval(toggle, rate); } var state = null; function toggle(){ state = !state; if (state){ led.on(); } else { led.off(); } } function steady(state){ console.log("Steady: ", state); if (null !== fTimer){ clearInterval(fTimer); fTimer = null; } if (state) { led.on(); } else { led.off(); } } return { on: function(){ steady(true); }, off: function(){ steady(false); }, slowest: function(){ flashing(VSLOW); }, slow: function(){ flashing(SLOW); }, fast: function(){ flashing(FAST); }, flash: function(){ flashing(MODERATE); } }; } module.exports = { create: Led, createFlasher: LedFlasher }; })();