Add log library and microswitch logic
This commit is contained in:
parent
a9f2040f3f
commit
50a335af95
|
@ -1,5 +1,7 @@
|
|||
'use strict'
|
||||
|
||||
const log = require('../log')('intval')
|
||||
|
||||
let Gpio
|
||||
try {
|
||||
Gpio = require('onoff').Gpio
|
||||
|
@ -42,7 +44,7 @@ class Intval {
|
|||
time : 0, //length of frame, in ms
|
||||
delay : 0, //delay before start of frame, in ms
|
||||
|
||||
expected : 0 //expected length of frame, in ms
|
||||
expected : 1000 //expected length of frame, in ms
|
||||
},
|
||||
release : {
|
||||
time: 0,
|
||||
|
@ -55,6 +57,7 @@ class Intval {
|
|||
}
|
||||
this._releaseMin = 50
|
||||
this._releaseSequence = 1000
|
||||
this._microDelay = 10 // delay after stop signal before stopping motors
|
||||
this._declarePins()
|
||||
process.on('SIGINT', this._undeclarePins)
|
||||
}
|
||||
|
@ -88,8 +91,8 @@ class Intval {
|
|||
*
|
||||
*/
|
||||
_startFwd () {
|
||||
this._pin.fwd.set(1)
|
||||
this._pin.bwd.set(0)
|
||||
this._pin.fwd.writeSync(1)
|
||||
this._pin.bwd.writeSync(0)
|
||||
//start high-cpu watch
|
||||
}
|
||||
/**
|
||||
|
@ -97,16 +100,16 @@ class Intval {
|
|||
*
|
||||
*/
|
||||
_startBwd () {
|
||||
this._pin.fwd.set(0)
|
||||
this._pin.bwd.set(1)
|
||||
this._pin.fwd.writeSync(0)
|
||||
this._pin.bwd.writeSync(1)
|
||||
}
|
||||
/**
|
||||
* Stop motor by setting both motor pins to 0 (LOW)
|
||||
*
|
||||
*/
|
||||
_stop () {
|
||||
this._pin.fwd.set(0)
|
||||
this._pin.bwd.set(0)
|
||||
this._pin.fwd.writeSync(0)
|
||||
this._pin.bwd.writeSync(0)
|
||||
|
||||
let len = (+new Date()) - this._state.frame.start
|
||||
|
||||
|
@ -119,8 +122,9 @@ class Intval {
|
|||
/**
|
||||
* Callback for watching relese switch state changes.
|
||||
* Using GPIO 06 on Raspberry Pi Zero W.
|
||||
* * If closed, start timer.
|
||||
* * If opened, check timer AND
|
||||
*
|
||||
* 1) If closed AND frame active, start timer, set state primed to `true`.
|
||||
* 1) If opened AND frame active, stop frame
|
||||
*
|
||||
* Microswitch + 10K ohm resistor
|
||||
* * 1 === open
|
||||
|
@ -132,11 +136,26 @@ class Intval {
|
|||
*
|
||||
*/
|
||||
_watchMicro (err, val) {
|
||||
const NOW = +new Date()
|
||||
if (err) {
|
||||
console.error(err)
|
||||
}
|
||||
this._state.frame.val = val
|
||||
//determine when to stop
|
||||
if (val === 0 && this._state.frame.active) {
|
||||
if (!this._state.micro.primed) {
|
||||
this._state.micro.primed = true
|
||||
this._state.micro.time = NOW
|
||||
console.log('Mircoswitch primed to stop motor')
|
||||
}
|
||||
} else if (val === 1 && this._state.frame.active) {
|
||||
if (this._state.micro.primed) {
|
||||
this._state.micro.primed = false
|
||||
this._state.micro.time = 0
|
||||
setTimeout( () => {
|
||||
console.log(`Stopped frame after ${NOW - this._state.micro.time}ms`)
|
||||
}, this._microDelay)
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Callback for watching relese switch state changes.
|
||||
|
@ -178,7 +197,7 @@ class Intval {
|
|||
} else if (press >= this._releaseSequence) {
|
||||
this.sequence()
|
||||
}
|
||||
console.log(`Release closed for ${press}`)
|
||||
console.log(`Release closed for ${press}ms`)
|
||||
this._state.release.time = 0
|
||||
this._state.release.active = false
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue