feat: shoots cat when in range

This commit is contained in:
ysandler 2021-01-27 20:05:35 -06:00 committed by joshuashoemaker
parent 50e2ffea02
commit 371fb65aec
9 changed files with 122 additions and 4 deletions

View File

@ -0,0 +1,13 @@
import IWaterPump from '../Interfaces/IWaterPump'
class WaterPump implements IWaterPump {
public pinOne: number
public pinTwo: number
constructor (props: IWaterPump) {
this.pinOne = props.pinOne
this.pinTwo = props.pinTwo
}
}
export default WaterPump

View File

@ -0,0 +1,46 @@
import IWaterPump from '../Interfaces/IWaterPump'
import * as childProcesses from 'child_process'
import IWaterPumperConstructor from '../Interfaces/IWaterPumperConstructor'
import IWaterPumper from '../Interfaces/IWaterPumper'
import makeWaterPump from '../UseCases/Factories/makeWaterPump'
class WaterPumper implements IWaterPumper {
public waterPump: IWaterPump
public isActive: boolean = false
private pumpProcess: childProcesses.ChildProcessWithoutNullStreams | null = null
private pumpActiveTimeInSeconds: number
private pumpCoolDownTimeInSeconds: number
constructor (props: IWaterPumperConstructor) {
this.waterPump = makeWaterPump({
pinOne: props.pinOne,
pinTwo: props.pinTwo
})
this.pumpActiveTimeInSeconds =props.pumpActiveTimeInSeconds
this.pumpCoolDownTimeInSeconds = props.pumpCoolDownTimeInSeconds
}
private async coolDown () {
return new Promise(resolve => setTimeout(resolve, this.pumpCoolDownTimeInSeconds * 1000))
}
public async pump () {
if (this.isActive) return
const pumpProcessArguments = [
'src/Robotics/moveDcMotor.py',
this.waterPump.pinOne.toString(),
this.waterPump.pinTwo.toString(),
this.pumpActiveTimeInSeconds.toString()
]
this.pumpProcess = childProcesses.spawn('python', pumpProcessArguments)
this.isActive = true
await this.coolDown()
this.isActive = false
}
}
export default WaterPumper

View File

@ -0,0 +1,6 @@
interface IWaterPump {
pinOne: number,
pinTwo: number
}
export default IWaterPump

View File

@ -0,0 +1,9 @@
import IWaterPump from "./IWaterPump";
interface IWaterPumper {
pump(): void
isActive: boolean
waterPump: IWaterPump
}
export default IWaterPumper

View File

@ -0,0 +1,8 @@
interface IWaterPumperConstructor {
pinOne: number,
pinTwo: number,
pumpActiveTimeInSeconds: number,
pumpCoolDownTimeInSeconds: number
}
export default IWaterPumperConstructor

View File

@ -0,0 +1,8 @@
import WaterPump from "../../Entities/WaterPump"
import IWaterPump from "../../Interfaces/IWaterPump"
function makeWaterPump (props: IWaterPump) {
return new WaterPump(props)
}
export default makeWaterPump

View File

@ -0,0 +1,8 @@
import WaterPumper from "../../Entities/WaterPumper"
import IWaterPumperConstructor from "../../Interfaces/IWaterPumperConstructor"
function makeWaterPumper (props: IWaterPumperConstructor) {
return new WaterPumper(props)
}
export default makeWaterPumper

View File

@ -1,12 +1,14 @@
import IEventManager from './Interfaces/IEventManager'
import IMotorMover from './Interfaces/IMotorMover'
import IWaterPumper from './Interfaces/IWaterPumper'
import makeServer from './UseCases/Factories/makeServer'
import makeEventManager from './UseCases/Factories/makeEventManager'
import makeMotorMover from './UseCases/Factories/makeMotorMover'
import makeWaterPumper from './UseCases/Factories/makeWaterPumper'
const main = () => {
console.log('starting')
console.log('Starting Robotics')
const port = 5005
makeServer(port)
@ -23,6 +25,13 @@ const main = () => {
pauseIntervalTime: 0.05
})
const waterPumper: IWaterPumper = makeWaterPumper({
pinOne: 37,
pinTwo: 35,
pumpActiveTimeInSeconds: 1,
pumpCoolDownTimeInSeconds: 5
})
eventManager.listen('onReceiveOffsets', (offsets: any[]) => {
if (offsets[0]?.x > 50) {
xAxisMotorMover.moveCounterClockwise()
@ -39,7 +48,10 @@ const main = () => {
} else {
yAxisMotorMover.stopMovement()
}
// console.log(`moving ${xAxisMotorMover.movementState}`)
if (offsets[0]?.hypotenuse <= 80) {
waterPumper.pump()
}
})
}

View File

@ -1,7 +1,15 @@
# command arguments to run process
# 1: int pin_one
# 2: int pin_two
# 3: int motor_active_time
import RPi.GPIO as GPIO
from time import sleep
import sys
motor_channel = (37, 35)
motor_channel = (int(sys.argv[1]), int(sys.argv[2])) # (37, 35)
motor_active_time = int(sys.argv[3])
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BOARD)
@ -10,5 +18,5 @@ GPIO.setup(motor_channel, GPIO.OUT)
GPIO.output(motor_channel, (GPIO.HIGH, GPIO.LOW))
print('Should be on')
sleep(1)
sleep(motor_active_time)
GPIO.output(motor_channel, (GPIO.LOW, GPIO.LOW))