69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
#!/usr/bin/python
|
|
from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor, Adafruit_StepperMotor
|
|
import time
|
|
import atexit
|
|
import threading
|
|
import random
|
|
|
|
# create a default object, no changes to I2C address or frequency
|
|
mh = Adafruit_MotorHAT()
|
|
|
|
# create empty threads (these will hold the stepper 1 and 2 threads)
|
|
st1 = threading.Thread()
|
|
st2 = threading.Thread()
|
|
|
|
|
|
# recommended for auto-disabling motors on shutdown!
|
|
def turnOffMotors():
|
|
mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
|
|
mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
|
|
mh.getMotor(3).run(Adafruit_MotorHAT.RELEASE)
|
|
mh.getMotor(4).run(Adafruit_MotorHAT.RELEASE)
|
|
|
|
atexit.register(turnOffMotors)
|
|
|
|
myStepper1 = mh.getStepper(200, 1) # 200 steps/rev, motor port #1
|
|
myStepper2 = mh.getStepper(200, 2) # 200 steps/rev, motor port #1
|
|
myStepper1.setSpeed(60) # 30 RPM
|
|
myStepper2.setSpeed(60) # 30 RPM
|
|
|
|
|
|
stepstyles = [Adafruit_MotorHAT.SINGLE, Adafruit_MotorHAT.DOUBLE, Adafruit_MotorHAT.INTERLEAVE, Adafruit_MotorHAT.MICROSTEP]
|
|
|
|
def stepper_worker(stepper, numsteps, direction, style):
|
|
#print("Steppin!")
|
|
stepper.step(numsteps, direction, style)
|
|
#print("Done")
|
|
|
|
while (True):
|
|
if not st1.isAlive():
|
|
randomdir = random.randint(0, 1)
|
|
print("Stepper 1"),
|
|
if (randomdir == 0):
|
|
dir = Adafruit_MotorHAT.FORWARD
|
|
print("forward"),
|
|
else:
|
|
dir = Adafruit_MotorHAT.BACKWARD
|
|
print("backward"),
|
|
randomsteps = random.randint(10,50)
|
|
print("%d steps" % randomsteps)
|
|
st1 = threading.Thread(target=stepper_worker, args=(myStepper1, randomsteps, dir, stepstyles[random.randint(0,3)],))
|
|
st1.start()
|
|
|
|
if not st2.isAlive():
|
|
print("Stepper 2"),
|
|
randomdir = random.randint(0, 1)
|
|
if (randomdir == 0):
|
|
dir = Adafruit_MotorHAT.FORWARD
|
|
print("forward"),
|
|
else:
|
|
dir = Adafruit_MotorHAT.BACKWARD
|
|
print("backward"),
|
|
|
|
randomsteps = random.randint(10,50)
|
|
print("%d steps" % randomsteps)
|
|
|
|
st2 = threading.Thread(target=stepper_worker, args=(myStepper2, randomsteps, dir, stepstyles[random.randint(0,3)],))
|
|
st2.start()
|
|
|
|
time.sleep(0.1) # Small delay to stop from constantly polling threads (see: https://forums.adafruit.com/viewtopic.php?f=50&t=104354&p=562733#p562733)
|