Push dev work to master #2
|
@ -6,7 +6,7 @@ let Gpio
|
||||||
try {
|
try {
|
||||||
Gpio = require('onoff').Gpio
|
Gpio = require('onoff').Gpio
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.warn('Failed including Gpio, using sim')
|
log.warn('Failed including Gpio, using sim')
|
||||||
Gpio = require('../../lib/onoffsim').Gpio
|
Gpio = require('../../lib/onoffsim').Gpio
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,11 +55,14 @@ class Intval {
|
||||||
primed : false //is ready to stop frame
|
primed : false //is ready to stop frame
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._releaseMin = 50
|
this._releaseMin = 50
|
||||||
this._releaseSequence = 1000
|
this._releaseSequence = 1000
|
||||||
this._microDelay = 10 // delay after stop signal before stopping motors
|
this._microDelay = 10 // delay after stop signal before stopping motors
|
||||||
|
|
||||||
this._declarePins()
|
this._declarePins()
|
||||||
process.on('SIGINT', this._undeclarePins)
|
process.on('SIGINT', this._undeclarePins)
|
||||||
|
process.on('uncaughtException', this._undeclarePins)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* (internal function) Declares all Gpio pins that will be used
|
* (internal function) Declares all Gpio pins that will be used
|
||||||
|
@ -71,8 +74,8 @@ class Intval {
|
||||||
pin = PINS[p]
|
pin = PINS[p]
|
||||||
if (pin.edge) this._pin[p] = Gpio(pin.pin, pin.dir, pin.edge)
|
if (pin.edge) this._pin[p] = Gpio(pin.pin, pin.dir, pin.edge)
|
||||||
if (!pin.edge) this._pin[p] = Gpio(pin.pin, pin.dir)
|
if (!pin.edge) this._pin[p] = Gpio(pin.pin, pin.dir)
|
||||||
|
log.info('_declarePins', { pin : pin.pin, dir : pin.dir, edge : pin.edge })
|
||||||
}
|
}
|
||||||
console.dir(this._pin)
|
|
||||||
this._pin.release.watch(this._watchRelease)
|
this._pin.release.watch(this._watchRelease)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -81,10 +84,16 @@ class Intval {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
_undeclarePins () {
|
_undeclarePins () {
|
||||||
|
if (!this._pin) return process.exit()
|
||||||
|
log.warn('_undeclarePins', { pin : PINS.fwd.pin, val : 0, reason : 'exiting'})
|
||||||
|
this._pin.fwd.writeSync(0)
|
||||||
|
log.warn('_undeclarePins', { pin : PINS.bwd.pin, val : 0, reason : 'exiting'})
|
||||||
|
this._pin.bwd.writeSync(0)
|
||||||
this._pin.fwd.unexport()
|
this._pin.fwd.unexport()
|
||||||
this._pin.bwd.unexport()
|
this._pin.bwd.unexport()
|
||||||
this._pin.micro.unexport()
|
this._pin.micro.unexport()
|
||||||
this._pin.release.unexport()
|
this._pin.release.unexport()
|
||||||
|
process.exit()
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Start motor in forward direction by setting correct pins in h-bridge
|
* Start motor in forward direction by setting correct pins in h-bridge
|
||||||
|
@ -113,7 +122,7 @@ class Intval {
|
||||||
|
|
||||||
let len = (+new Date()) - this._state.frame.start
|
let len = (+new Date()) - this._state.frame.start
|
||||||
|
|
||||||
console.log(`Frame stopped ${len}ms`)
|
log.info(`Frame stopped ${len}ms`)
|
||||||
|
|
||||||
this._pin.micro.unwatch()
|
this._pin.micro.unwatch()
|
||||||
this._state.frame.active = false
|
this._state.frame.active = false
|
||||||
|
@ -138,21 +147,21 @@ class Intval {
|
||||||
_watchMicro (err, val) {
|
_watchMicro (err, val) {
|
||||||
const NOW = +new Date()
|
const NOW = +new Date()
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error(err)
|
log.error('_watchMicro', err)
|
||||||
}
|
}
|
||||||
//determine when to stop
|
//determine when to stop
|
||||||
if (val === 0 && this._state.frame.active) {
|
if (val === 0 && this._state.frame.active) {
|
||||||
if (!this._state.micro.primed) {
|
if (!this._state.micro.primed) {
|
||||||
this._state.micro.primed = true
|
this._state.micro.primed = true
|
||||||
this._state.micro.time = NOW
|
this._state.micro.time = NOW
|
||||||
console.log('Mircoswitch primed to stop motor')
|
log.info('Mircoswitch primed to stop motor')
|
||||||
}
|
}
|
||||||
} else if (val === 1 && this._state.frame.active) {
|
} else if (val === 1 && this._state.frame.active) {
|
||||||
if (this._state.micro.primed) {
|
if (this._state.micro.primed) {
|
||||||
this._state.micro.primed = false
|
this._state.micro.primed = false
|
||||||
this._state.micro.time = 0
|
this._state.micro.time = 0
|
||||||
setTimeout( () => {
|
setTimeout( () => {
|
||||||
console.log(`Stopped frame after ${NOW - this._state.micro.time}ms`)
|
log.info(`Stopped frame after ${NOW - this._state.micro.time}ms`)
|
||||||
}, this._microDelay)
|
}, this._microDelay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,9 +187,9 @@ class Intval {
|
||||||
const NOW = +new Date()
|
const NOW = +new Date()
|
||||||
let press = 0
|
let press = 0
|
||||||
if (err) {
|
if (err) {
|
||||||
return console.error(err)
|
return log.error(err)
|
||||||
}
|
}
|
||||||
console.log(`Release switch val: ${val}`)
|
log.info(`Release switch val: ${val}`)
|
||||||
if (val === 0) {
|
if (val === 0) {
|
||||||
//closed
|
//closed
|
||||||
if ((!this._state.release.active && this._state.release.time === 0) || (this._state.release.active && (NOW - this._state.release.time) > (this._releaseSequence * 10))
|
if ((!this._state.release.active && this._state.release.time === 0) || (this._state.release.active && (NOW - this._state.release.time) > (this._releaseSequence * 10))
|
||||||
|
@ -197,7 +206,7 @@ class Intval {
|
||||||
} else if (press >= this._releaseSequence) {
|
} else if (press >= this._releaseSequence) {
|
||||||
this.sequence()
|
this.sequence()
|
||||||
}
|
}
|
||||||
console.log(`Release closed for ${press}ms`)
|
log.info(`Release closed for ${press}ms`)
|
||||||
this._state.release.time = 0
|
this._state.release.time = 0
|
||||||
this._state.release.active = false
|
this._state.release.active = false
|
||||||
}
|
}
|
||||||
|
@ -213,7 +222,7 @@ class Intval {
|
||||||
*/
|
*/
|
||||||
setDir (val = true) {
|
setDir (val = true) {
|
||||||
if (typeof val !== 'boolean') {
|
if (typeof val !== 'boolean') {
|
||||||
return console.warn('Direction must be represented as either true or false')
|
return log.warn('Direction must be represented as either true or false')
|
||||||
}
|
}
|
||||||
this._state.dir = val
|
this._state.dir = val
|
||||||
}
|
}
|
||||||
|
@ -222,10 +231,9 @@ class Intval {
|
||||||
*
|
*
|
||||||
* @param {?boolean} [dir="null"] (optional) Direction of the frame
|
* @param {?boolean} [dir="null"] (optional) Direction of the frame
|
||||||
* @param {?integer} [time="null"] (optional) Exposure time, 0 = minimum
|
* @param {?integer} [time="null"] (optional) Exposure time, 0 = minimum
|
||||||
* @param {?integer} [delay="null"] (optional) Delay after frame before another can be started
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
frame (dir = null, time = null, delay = null) { //may be overloaded, delay is suspect
|
frame (dir = null, time = null) {
|
||||||
if (dir === true || (dir === null && this._state.dir === true) ) {
|
if (dir === true || (dir === null && this._state.dir === true) ) {
|
||||||
dir = true
|
dir = true
|
||||||
} else {
|
} else {
|
||||||
|
@ -238,31 +246,16 @@ class Intval {
|
||||||
time = 0
|
time = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delay === null && this._state.delay !== 0) {
|
|
||||||
delay = this._state.delay
|
|
||||||
} else {
|
|
||||||
delay = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
this._state.frame.start = +new Date()
|
this._state.frame.start = +new Date()
|
||||||
this._state.frame.active = true
|
this._state.frame.active = true
|
||||||
this._pin.micro.watch(this._watchMicro)
|
this._pin.micro.watch(this._watchMicro)
|
||||||
|
|
||||||
if (delay !== 0) {
|
log.info('frame', {dir : dir, time : time})
|
||||||
setTimeout(function () {
|
|
||||||
if (dir) {
|
if (dir) {
|
||||||
this._startFwd()
|
this._startFwd()
|
||||||
} else {
|
|
||||||
this._startBwd()
|
|
||||||
}
|
|
||||||
|
|
||||||
}, delay)
|
|
||||||
} else {
|
} else {
|
||||||
if (dir) {
|
this._startBwd()
|
||||||
this._startFwd()
|
|
||||||
} else {
|
|
||||||
this._startBwd()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -270,7 +263,7 @@ class Intval {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
sequence () {
|
sequence () {
|
||||||
console.log(`Started sequence`)
|
log.info('sequence', `Started sequence`)
|
||||||
}
|
}
|
||||||
status () {
|
status () {
|
||||||
return this._state
|
return this._state
|
||||||
|
|
Loading…
Reference in New Issue