Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## File: RealStepper03.py
- ## Date Of Creation: in 2010
- ## Author: ****************
- ## Version: 0.3
- import time
- import os
- class Stepper():
- """Basic stepper motor control functions"""
- def __init__(self, port):
- ## Set Up
- self.port = port
- self.output = 3
- self.pos = 0 ## 0-200
- self.mode = None
- self.port.setData(self.output)
- self.mysleep(2)
- def updatePos(self, p):
- self.pos = (self.pos + p)%200
- def mysleep(self, t):
- """More precise sleep function"""
- ts = time.clock()
- while ts+t >= time.clock():
- pass
- def halfStep(self, d = 0):
- """Make one half step in direction d
- d .... direction (0 --> left
- 1 --> right)
- """
- if d == 0:
- if self.output == 1:
- self.output = 3
- elif self.output == 3:
- self.output = 2
- elif self.output == 2:
- self.output = 6
- elif self.output == 6:
- self.output = 4
- elif self.output == 4:
- self.output = 12
- elif self.output == 12:
- self.output = 8
- elif self.output == 8:
- self.output = 9
- elif self.output == 9:
- self.output = 1
- else:
- print "hnnj? halfStep", self.output
- self.port.setData(self.output)
- self.updatePos(-0.5)
- elif d == 1:
- if self.output == 1:
- self.output = 9
- elif self.output == 9:
- self.output = 8
- elif self.output == 8:
- self.output = 12
- elif self.output == 12:
- self.output = 4
- elif self.output == 4:
- self.output = 6
- elif self.output == 6:
- self.output = 2
- elif self.output == 2:
- self.output = 3
- elif self.output == 3:
- self.output = 1
- else:
- print "hnnj? halfStep", self.output
- self.port.setData(self.output)
- self.updatePos(0.5)
- else:
- print "Something wrong in halfStep()"
- self.mode = "half"
- def torqueStep(self, d = 0):
- """Make one torque step in direction d
- d .... direction (0 --> left
- 1 --> right)
- """
- ## Map bits from halfStep
- ## Very crude implementation
- ## It only corrects to one direction
- if self.output in [1,2,4,8]:
- if self.output == 1:
- self.output = 3
- elif self.output == 2:
- self.output = 6
- elif self.output == 4:
- self.output = 12
- elif self.output == 8:
- self.output = 9
- self.port.setData(self.output)
- self.updatePos(-0.5)
- if d == 0:
- if self.output == 3:
- self.output = 6
- elif self.output == 6:
- self.output = 12
- elif self.output == 12:
- self.output = 9
- elif self.output == 9:
- self.output = 3
- else:
- print "hnnj? torqueStep", self.output
- self.port.setData(self.output)
- self.updatePos(-1)
- elif d == 1:
- if self.output == 3:
- self.output = 9
- elif self.output == 9:
- self.output = 12
- elif self.output == 12:
- self.output = 6
- elif self.output == 6:
- self.output = 3
- else:
- print "hnnj? torqueStep", self.output
- self.port.setData(self.output)
- self.updatePos(+1)
- else:
- print "Something wrong in torqueStep()"
- self.mode = "torque"
- def steps(self, n, step = "t", speed = 0.002):
- """Make n number of steps"""
- if n != 0:
- if n < 0: direction = 0
- elif n > 0: direction = 1
- if step == "t":
- for k in xrange(abs(n)):
- self.torqueStep(direction)
- self.mysleep(speed)
- elif step == "h":
- for k in xrange(abs(n)):
- self.halfStep(direction)
- self.mysleep(speed)
- else: print "Cant do zero step!"
- def toPos(self, pos, speed = 0.009):
- """Go to position pos
- pos in range (0,201)
- """
- a, b = range(100,200+1), range(0,100+1)
- a.remove(200)
- a.extend(b)
- allowed = a
- if pos in allowed and pos != self.pos:
- left, right = allowed[:allowed.index(self.pos)],\
- allowed[allowed.index(self.pos)+1:]
- if pos in left:
- direction = -1
- steps = len(left)-left.index(pos)
- elif pos in right:
- direction = 1
- steps = right.index(pos)+1
- self.steps(steps*direction, "t", speed)
- def toPosRel(self, relPos, speed = 0.009):
- """Go to position pos
- pos can be negative or positive
- """
- if relPos >= 0:
- goto = relPos
- elif relPos < 0:
- goto = 200+relPos
- else:
- goto = None
- self.toPos(goto, speed)
- class PanCamTextCommander():
- """Text commander for PanCam"""
- def __init__(self, par):
- self.par = par
- os.system("title PanCam")
- self.interface()
- def interface(self):
- """Text interface"""
- greting = """
- Welcome to PanCam Text Commander
- Here are your options:
- 1 .... Manual control
- 2 .... Set position
- 3 .... Run test
- q .... Quit
- ...
- ..
- .
- comming soon! :)"""
- q = False
- while q != True:
- os.system("cls")
- print greting
- choice = raw_input("\nYour choice >>> ")
- if len(choice) == 0:
- continue
- if choice == "1":
- self.manual()
- elif choice == "2":
- self.setPos()
- elif choice == "3":
- self.test()
- elif choice in "qQXx":
- q = True
- else: pass
- def manual(self):
- """Manuali control PanCam"""
- q = False
- while q != True:
- p = raw_input("\nPos: %s\nTo pos >>> " %self.par.pos)
- if len(p) == 0:
- continue#p = "a"
- try:
- p = int(p)
- except:
- if p in "qQXx":
- q = True
- else:
- p = self.par.pos
- self.par.toPosRel(p)
- def setPos(self):
- """Manuali set up the position"""
- q = False
- while q != True:
- p = raw_input("\nPos: %s\nSet pos to >>> " %self.par.pos)
- if len(p) == 0:
- q = True
- self.par.pos = 0
- print "\n\t==== Position set! ====\t"
- time.sleep(0.5)
- try:
- p = int(p)
- except:
- if p in "qQXx":
- q = True
- else:
- p = self.par.pos
- self.par.toPosRel(p)
- def test(self):
- """Tests"""
- for a in range(4):
- for p in [-25,25,-50,50,-75,75,-100,99,0]:
- #p = random.choice(range(-100,100))
- self.par.toPosRel(p)
- print "POS:", self.par.pos
- self.par.mysleep(2)
- self.par.toPosRel(0)
- if __name__ == "__main__":
- ## Example ##
- ## Imports
- import parallel as pll
- #import RealStepper03 as RS
- ## Init port
- port = pll.Parallel()
- ## Init Stepper
- PanCam = Stepper(port)
- ## Init Text Commander
- textPanCam = PanCamTextCommander(PanCam)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement