pyroelectric.relay.js // 红外移动传感 FIR800 5v// http://www.espruino.com/Pyroelectric// Relay: low level trigger// @author g8upvar Low_Level = 0;var Hight_Level = 1;var ON = Low_Level;var OFF = Hight_Level;var RELAY = A1;function set
// 红外移动传感 FIR800 5v
// http://www.espruino.com/Pyroelectric
// Relay: low level trigger
// @author g8up
var Low_Level = 0;
var Hight_Level = 1;
var ON = Low_Level;
var OFF = Hight_Level;
var RELAY = A1;
function setRelay(level) {
digitalWrite(RELAY, level);
}
function active() {
LED2.write(1);
setRelay(ON);
}
function deactive() {
LED2.write(0);
setRelay(OFF);
}
/**
* Timer encapsulate
*/
function T(handle, delay) {
this.delay = delay;
this.handle = handle;
}
T.prototype.clear = function () {
if (this._t !== undefined) {
this._t = undefined;
clearTimeout(this._t);
}
};
T.prototype.tick = function () {
var me = this;
this.clear();
this._t = setTimeout(function () {
me._t = undefined;
me.handle();
}, this.delay);
};
function run() {
var pyroelectric = A0;
var TURN_OFF_DELAY = 100e3; // 100 sec
var relayLevel = OFF;
var TURN_ON_TRIGGER_COUNTER = 0;
var turnOffTimer = new T(function () {
relayLevel = OFF;
deactive();
}, TURN_OFF_DELAY);
var turnOnTimer = new T(function () {
TURN_ON_TRIGGER_COUNTER = 0;
}, 20e3);// 20sec 后重置计数
setWatch(function () {
if (relayLevel === OFF) {
TURN_ON_TRIGGER_COUNTER++;
if (TURN_ON_TRIGGER_COUNTER > 2) {// 触发3次再开启
relayLevel = ON;
active();
TURN_ON_TRIGGER_COUNTER = 0;
turnOnTimer.clear();
}
else {
turnOnTimer.tick();
}
console.log("Movement detected", TURN_ON_TRIGGER_COUNTER);
}
else {
turnOffTimer.tick();
}
}, pyroelectric, { repeat: true, edge: "rising" });
}
E.on('init', run);
