46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
var DigitalInput = require('./base/digitalSensor')
|
|
|
|
const buttonMode = {
|
|
UP: 0,
|
|
DOWN: 1
|
|
}
|
|
|
|
var mode = buttonMode.UP //not pressed
|
|
|
|
var pressedDateTime
|
|
var currentDateTime
|
|
var milliseconds
|
|
|
|
//digital button, can throw singlepress and longpress events
|
|
function DigitalButton(pin, longPressDelay) {
|
|
DigitalInput.apply(this, Array.prototype.slice.call(arguments))
|
|
this.longPressDelay = longPressDelay || 1100
|
|
this.on('change', function (res) {
|
|
//user presses the button for the first time
|
|
if (res == 1 && mode === buttonMode.UP) {
|
|
pressedDateTime = new Date()
|
|
mode = buttonMode.DOWN
|
|
return
|
|
}
|
|
//user continues to press the button
|
|
else if (res == 1 && mode === buttonMode.DOWN) {
|
|
//do nothing
|
|
return
|
|
} else { //res == 0 so user has lifted her finger
|
|
currentDateTime = new Date()
|
|
milliseconds = currentDateTime.getTime() - pressedDateTime.getTime()
|
|
//if less than longPressDelay milliseconds
|
|
if (milliseconds <= this.longPressDelay) {
|
|
this.emit('down', 'singlepress')
|
|
} else {
|
|
this.emit('down', 'longpress')
|
|
}
|
|
//reset the mode
|
|
mode = buttonMode.UP
|
|
}
|
|
});
|
|
}
|
|
|
|
DigitalButton.prototype = new DigitalInput()
|
|
|
|
module.exports = DigitalButton
|