Add log library and microswitch logic

This commit is contained in:
mmcwilliams 2017-09-24 22:28:26 -04:00
parent a9f2040f3f
commit 50a335af95
1 changed files with 30 additions and 11 deletions

View File

@ -1,5 +1,7 @@
'use strict' 'use strict'
const log = require('../log')('intval')
let Gpio let Gpio
try { try {
Gpio = require('onoff').Gpio Gpio = require('onoff').Gpio
@ -42,7 +44,7 @@ class Intval {
time : 0, //length of frame, in ms time : 0, //length of frame, in ms
delay : 0, //delay before start 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 : { release : {
time: 0, time: 0,
@ -55,6 +57,7 @@ class Intval {
} }
this._releaseMin = 50 this._releaseMin = 50
this._releaseSequence = 1000 this._releaseSequence = 1000
this._microDelay = 10 // delay after stop signal before stopping motors
this._declarePins() this._declarePins()
process.on('SIGINT', this._undeclarePins) process.on('SIGINT', this._undeclarePins)
} }
@ -88,8 +91,8 @@ class Intval {
* *
*/ */
_startFwd () { _startFwd () {
this._pin.fwd.set(1) this._pin.fwd.writeSync(1)
this._pin.bwd.set(0) this._pin.bwd.writeSync(0)
//start high-cpu watch //start high-cpu watch
} }
/** /**
@ -97,16 +100,16 @@ class Intval {
* *
*/ */
_startBwd () { _startBwd () {
this._pin.fwd.set(0) this._pin.fwd.writeSync(0)
this._pin.bwd.set(1) this._pin.bwd.writeSync(1)
} }
/** /**
* Stop motor by setting both motor pins to 0 (LOW) * Stop motor by setting both motor pins to 0 (LOW)
* *
*/ */
_stop () { _stop () {
this._pin.fwd.set(0) this._pin.fwd.writeSync(0)
this._pin.bwd.set(0) this._pin.bwd.writeSync(0)
let len = (+new Date()) - this._state.frame.start let len = (+new Date()) - this._state.frame.start
@ -119,8 +122,9 @@ class Intval {
/** /**
* Callback for watching relese switch state changes. * Callback for watching relese switch state changes.
* Using GPIO 06 on Raspberry Pi Zero W. * 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 * Microswitch + 10K ohm resistor
* * 1 === open * * 1 === open
@ -132,11 +136,26 @@ class Intval {
* *
*/ */
_watchMicro (err, val) { _watchMicro (err, val) {
const NOW = +new Date()
if (err) { if (err) {
console.error(err) console.error(err)
} }
this._state.frame.val = val
//determine when to stop //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. * Callback for watching relese switch state changes.
@ -178,7 +197,7 @@ class Intval {
} else if (press >= this._releaseSequence) { } else if (press >= this._releaseSequence) {
this.sequence() this.sequence()
} }
console.log(`Release closed for ${press}`) console.log(`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
} }