intval3/lib/intval/index.js

129 lines
2.2 KiB
JavaScript
Raw Normal View History

'use strict'
let Gpio
try {
Gpio = require('onoff').Gpio
} catch (e) {
console.warn('Failed including Gpio, using sim')
Gpio = require('../../lib/onoffsim').Gpio
}
2017-08-26 23:26:30 +00:00
const PINS = {
fwd : {
pin : 4,
dir : 'out'
},
bwd : {
pin : 5,
dir : 'out'
},
micro : {
pin : 6,
dir : 'in',
edge : 'rising'
},
release : {
pin : 7,
dir : 'in',
edge : 'both'
}
}
class Intval {
constructor () {
this._pin = {}
2017-08-29 12:23:52 +00:00
this._state = {
dir : true, //forward
frame : {
start : 0,
active : false,
val : 0,
expected : 0
}
2017-08-29 12:23:52 +00:00
}
this._declarePins()
2017-09-16 17:35:39 +00:00
process.on('SIGINT', () => {
this._undeclarePins()
})
}
_declarePins () {
this._pin.fwd = Gpio(4, 'out')
this._pin.bwd = Gpio(5, 'out')
this._pin.micro = Gpio(6, 'in', 'rising')
this._pin.release = Gpio(7, 'in', 'both')
this._pin.release.watch(this._watchRelease)
}
2017-09-16 17:35:39 +00:00
_undeclarePins () {
this._pin.fwd.unexport()
this._pin.bwd.unexport()
this._pin.micro.unexport()
this._pin.release.unexport()
}
_startFwd () {
this._pin.fwd.set(1)
this._pin.bwd.set(0)
//start high-cpu watch
}
_startBwd () {
this._pin.fwd.set(0)
this._pin.bwd.set(1)
}
2017-08-29 12:23:52 +00:00
_watchMicro (err, val) {
if (err) {
console.error(err)
}
this._state.frame.val = val
//determine when to stop
2017-08-29 12:23:52 +00:00
}
_watchRelease (err, val) {
if (err) {
2017-08-29 12:23:52 +00:00
console.error(err)
}
console.log(`Release switch val: ${val}`)
}
2017-08-29 12:23:52 +00:00
setDir (val = true) {
if (typeof val !== 'boolean') {
return console.warn('Direction must be represented as either true or false')
}
this._state.dir = val
}
frame (dir = true, time = 0, delay = 0) {
this._state.frame.start = +new Date()
this._state.frame.active = true
2017-08-29 12:23:52 +00:00
this._pin.micro.watch(this._watchMicro)
if (delay !== 0) {
setTimeout(function () {
if (dir) {
this._startFwd()
} else {
this._startBwd()
}
}, delay)
} else {
if (dir) {
this._startFwd()
} else {
this._startBwd()
}
}
}
2017-08-29 12:23:52 +00:00
_stop () {
this._pin.fwd.set(0)
this._pin.bwd.set(0)
let len = (+new Date()) - this._state.frame.start
console.log(`Frame stopped ${len}ms`)
2017-08-29 12:23:52 +00:00
this._pin.micro.unwatch()
this._state.frame.active = false
2017-08-29 12:23:52 +00:00
}
2017-08-22 04:00:24 +00:00
status () {
2017-08-29 12:23:52 +00:00
return this._state
2017-08-22 04:00:24 +00:00
}
}
module.exports = new Intval()