GPIO 프로그램 [gpioControl.py]
gpioControl.py
import RPi.GPIO as GPIO
from time import sleep
ina1 = 33
ina2 = 35
ena = 37
inb1 = 31
inb2 = 29
enb = 23
fire = 16
UpDownCam=12
RightLeftCam=18
GPIO.setmode(GPIO.BOARD)
GPIO.setup(UpDownCam, GPIO.OUT, initial=1)
GPIO.setup(RightLeftCam, GPIO.OUT, initial=1)
GPIO.setup(11, GPIO.OUT, initial=1) # light
GPIO.setup(ina1,GPIO.OUT)
GPIO.setup(ina2,GPIO.OUT)
GPIO.setup(ena,GPIO.OUT)
GPIO.setup(inb1,GPIO.OUT)
GPIO.setup(inb2,GPIO.OUT)
GPIO.setup(enb,GPIO.OUT)
p1 = GPIO.PWM(RightLeftCam, 50) # 50 Hz
p2 = GPIO.PWM(UpDownCam, 50) # 50
p1.start(0)
p2.start(0)
p1.ChangeDutyCycle(0)
p2.ChangeDutyCycle(0)
pa=GPIO.PWM(ena,1000)
pa.start(25)
pb=GPIO.PWM(enb,1000)
pb.start(25)
initVerticalVal = 6.9
initHorizontalVal = 6.6
verticalVal = initVerticalVal
horizontalVal = initHorizontalVal
cameraPositionX = initVerticalVal
cameraPositionY = initHorizontalVal
# Set up camera constants
IM_WIDTH = 640
IM_HEIGHT = 480
class GpioControl(object):
def __init__(self):
global verticalVal
global horizontalVal
global p1
global p2
p1.ChangeDutyCycle(verticalVal)
p2.ChangeDutyCycle(horizontalVal)
sleep(0.1)
p1.ChangeDutyCycle(0)
p2.ChangeDutyCycle(0)
print("> Init Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal))
def click(self):
GPIO.output(11, GPIO.LOW)
sleep(0.5)
GPIO.output(11, GPIO.HIGH)
sleep(1)
def __del__(self):
global p1
global p2
p1.stop()
p2.stop()
print(" GPIO.__del__() ")
GPIO.cleanup()
def startUp(self):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(UpDownCam, GPIO.OUT, initial=1)
GPIO.setup(RightLeftCam, GPIO.OUT, initial=1)
GPIO.setup(ina1,GPIO.OUT)
GPIO.setup(ina2,GPIO.OUT)
GPIO.setup(ena,GPIO.OUT)
GPIO.setup(inb1,GPIO.OUT)
GPIO.setup(inb2,GPIO.OUT)
GPIO.setup(enb,GPIO.OUT)
p1.start(0)
p2.start(0)
p1.ChangeDutyCycle(0)
p2.ChangeDutyCycle(0)
pa.start(25)
pb.start(25)
def cleanUp(self):
global p1
global p2
p1.stop()
p2.stop()
print(" GPIO.cleanUp() ")
GPIO.cleanup()
sleep(2)
def initMotorPosition(self):
# Init
global p1
global p2
p1.ChangeDutyCycle(cameraPositionX)
p2.ChangeDutyCycle(cameraPositionY)
sleep(0.1)
p1.ChangeDutyCycle(0)
p2.ChangeDutyCycle(0)
print("> Init Vert=" + str(cameraPositionX) + ",Hort=" + str(cameraPositionY))
return "Vert=" + str(cameraPositionX) + ",Hort=" + str(cameraPositionY)
def moveUp(self):
global verticalVal
global horizontalVal
global p2
if(verticalVal<12):
verticalVal = round(verticalVal+0.2, 1)
p2.ChangeDutyCycle(verticalVal)
print("> UP Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal))
sleep(0.1)
p2.ChangeDutyCycle(0)
return "Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal)
def moveDown(self):
global verticalVal
global horizontalVal
global p2
if(verticalVal>5):
verticalVal = round(verticalVal-0.2, 1)
p2.ChangeDutyCycle(verticalVal)
print("> Down Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal))
sleep(0.1)
p2.ChangeDutyCycle(0)
return "Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal)
def moveRight(self):
global verticalVal
global horizontalVal
global p1
if(horizontalVal>2.5):
horizontalVal = round(horizontalVal-0.2, 1)
p1.ChangeDutyCycle(horizontalVal)
print("> Right Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal))
sleep(0.1)
p1.ChangeDutyCycle(0)
return "Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal)
def moveLeft(self):
global verticalVal
global horizontalVal
global p1
if(horizontalVal<10):
horizontalVal = round(horizontalVal+0.2, 1)
p1.ChangeDutyCycle(horizontalVal)
print("> Left Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal))
sleep(0.1)
p1.ChangeDutyCycle(0)
return "Vert=" + str(verticalVal) + ",Hort=" + str(horizontalVal)
def goForward(self,time):
print("Go forward")
pa.ChangeDutyCycle(75)
GPIO.output(ina1,GPIO.HIGH)
GPIO.output(ina2,GPIO.LOW)
pb.ChangeDutyCycle(75)
GPIO.output(inb1,GPIO.HIGH)
GPIO.output(inb2,GPIO.LOW)
sleep(0.1*int(time))
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.LOW)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.LOW)
return " >> Go Forward"
def goBackward(self,time):
print("Go backward")
pa.ChangeDutyCycle(75)
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.HIGH)
pb.ChangeDutyCycle(75)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.HIGH)
sleep(0.1*int(time))
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.LOW)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.LOW)
return " >> Go Backward"
def goTurnleftback(self,time):
print("Go Turn Left back")
pa.ChangeDutyCycle(75)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.HIGH)
sleep(0.1*int(time))
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.LOW)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.LOW)
return " >> Go Turn Left back"
def goTurnrightback(self,time):
print("Go Turn Right back")
pb.ChangeDutyCycle(75)
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.HIGH)
sleep(0.1*int(time))
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.LOW)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.LOW)
return " >> Go Turn Right back"
def goTurnleftforward(self,time):
print("Go Turn Left forward")
pa.ChangeDutyCycle(75)
GPIO.output(inb1,GPIO.HIGH)
GPIO.output(inb2,GPIO.LOW)
sleep(0.1*int(time))
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.LOW)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.LOW)
return " >> Go Turn Left forward"
def goTurnrightforward(self,time):
print("Go Turn Right forward")
pb.ChangeDutyCycle(75)
GPIO.output(ina1,GPIO.HIGH)
GPIO.output(ina2,GPIO.LOW)
sleep(0.1*int(time))
GPIO.output(ina1,GPIO.LOW)
GPIO.output(ina2,GPIO.LOW)
GPIO.output(inb1,GPIO.LOW)
GPIO.output(inb2,GPIO.LOW)
return " >> Go Turn Right forward"
def move_to_position(self,ObjX, ObjY):
global cameraPositionX
global cameraPositionY
global p1
global p2
print(" >> Move to location x="+str(ObjX)+", y="+str(ObjY))
moveLoop = True
movX = int(IM_WIDTH/2)-ObjX
movY = int(IM_HEIGHT/2)-ObjY
print(" >> Center location movX="+str(movX)+", movY="+str(movY))
xx = 1
xy = 0
yx = 1
yy = 0
while(moveLoop):
if( xy < abs(movX) ):
p1.ChangeDutyCycle(cameraPositionX)
sleep(0.1)
p1.ChangeDutyCycle(0)
print("xx=" + str(xx) + ", xy="+ str(xy) +" cameraPositionX=" +str(round(cameraPositionX,1)))
xy = xx*xx * 12
xx = xx + 1
if(movX > 0): cameraPositionX = cameraPositionX - 0.2
else: cameraPositionX = cameraPositionX + 0.2
if( yy < abs(movY) ):
p2.ChangeDutyCycle(cameraPositionY)
sleep(0.1)
p2.ChangeDutyCycle(0)
print("yx=" + str(yx) + ", yy="+ str(yy) +" cameraPositionY=" +str(round(cameraPositionY,1)))
yy = yx*yx * 12
yx = yx + 1
if(movY > 0): cameraPositionY = cameraPositionY + 0.2
else: cameraPositionY = cameraPositionY - 0.2
elif( xy >= movX and yy >= movY):
print(" >> Center location movX="+str(movX)+", movY=" + str(movY))
print(" >> Position location xy="+str(xy)
+", yy="+str(yy)
+" cameraPositionX="+str(round(cameraPositionX,1))+
" cameraPositionY="+str(round(cameraPositionY,1))+" .. ")
moveLoop = False
def shooting(self):
GPIO.setup(fire,GPIO.OUT)
GPIO.output(fire,GPIO.HIGH)
sleep(0.5)
GPIO.output(fire,GPIO.LOW)
GPIO.cleanup()
self.startUp()
return "Fired !"