Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 1328

Python • Concurrent Processing Problem

$
0
0
I am working on a project in which I need 3 stepper motors running at the same time at different speeds. If tried asyncio and threading without much success. From what I've read, concurrent futures is the way to go.

The following code, runs each motor sequentially once and does not stay in the While True loop. Any help greatly appreciated.

Code:

from concurrent.futures import ProcessPoolExecutorimport timeimport pygame as pgimport boardimport randomfrom adafruit_motor import stepperfrom adafruit_motorkit import MotorKitimport sysimport ospg.init()kit1 = MotorKit(i2c=board.I2C())kit2 = MotorKit(address=0x61)kit1.stepper1.release()kit2.stepper1.release()kit1.stepper2.release()random.seed()def Step(smotor,times,delay,direction):    if (smotor==1):        if (direction=='b'):            for _ in range(times):                kit1.stepper1.onestep(direction=stepper.BACKWARD,style=stepper.INTERLEAVE)                time.sleep(delay)                        else:            for _ in range(times):                kit1.stepper1.onestep(direction=stepper.FORWARD,style=stepper.INTERLEAVE)                time.sleep(delay)        kit1.stepper1.release()    elif (smotor==2):        if (direction=='b'):            for _ in range(times):                kit1.stepper2.onestep(direction=stepper.BACKWARD,style=stepper.INTERLEAVE)                time.sleep(delay)        else:            for _ in range(times):                kit1.stepper2.onestep(direction=stepper.FORWARD,style=stepper.INTERLEAVE)                time.sleep(delay)        kit1.stepper2.release()    else:        if (direction=='b'):            for _ in range(times):                kit2.stepper1.onestep(direction=stepper.BACKWARD,style=stepper.INTERLEAVE)                time.sleep(delay)                        else:            for _ in range(times):                kit2.stepper1.onestep(direction=stepper.BACKWARD,style=stepper.INTERLEAVE)                time.sleep(delay)                        kit2.stepper1.release()#############################################################################        # Start of programwhile True:    with ProcessPoolExecutor(max_workers=5) as exe:        try:            exe.submit(Step(1,300,0.001,'b'))            exe.submit(Step(2,30,0.01,'b'))            exe.submit(Step(3,30,0.1,'b'))        except KeyboardInterrupt:            # if user hits Ctrl/C then exit            kit1.stepper1.release()            kit2.stepper1.release()            kit1.stepper2.release()        raise SystemExitkit1.stepper1.release()kit1.stepper2.release()kit2.stepper1.release()

Statistics: Posted by makingwithheld — Sun Feb 18, 2024 7:00 pm



Viewing all articles
Browse latest Browse all 1328

Trending Articles