(function(){ "use strict"; function Button(pin, states){ states = states || ["down", "up"]; var btnState = Number.NaN; var listenTimer = null; function listen(){ if (listenTimer == null){ listenTimer = setInterval(onCheck, 250); } btnState = pin.rawRead(); } function unlisten(){ if (listenTimer !== null){ clearInterval(listenTimer); listenTimer = null; } } function onCheck(){ var changed = false; var state = pin.rawRead(); if (state !== btnState){ changed = true; } btnState = state; if (!!changed && !!api.onChange){ api.onChange({detail: states[btnState], target: api}); } } var api = { listen: listen, unlisten: unlisten, onChange: null }; return api; } module.exports = { create: Button }; })();