I am trying to program a robot arm and I need two servos to run at the same time and be able to run in different directions for example on going 90° to 180° and the other servo going 90° to 0° , I am using a Arduino, python and pyfirmata any help would be good thank you!
import pyfirmata
import time
board = pyfirmata.Arduino('/dev/cu.usbmodem14201')
armlower2 = board.get_pin('d:6:s')
armlower1 = board.get_pin('d:10:s')
for angle in range(90, 180, 1):
armlower2.write(angle)
time.sleep(0.015)
for angle in range(180, 90, -1):
armlower2.write(angle)
time.sleep(0.015)
for angle in range(90, 0, -1):
armlower1.write(angle)
time.sleep(0.015)
for angle in range(0, 90, 1):
armlower1.write(angle)
time.sleep(0.015)
This moves the servos but only one at a time ?
The easiest approach would be to use threading
, here's a really simple example:
import threading
def move_armlower2():
for angle in range(90, 180, 1):
armlower2.write(angle)
time.sleep(0.015)
for angle in range(180, 90, -1):
armlower2.write(angle)
time.sleep(0.015)
def move_armlower1():
for angle in range(90, 0, -1):
armlower1.write(angle)
time.sleep(0.015)
for angle in range(0, 90, 1):
armlower1.write(angle)
time.sleep(0.015)
threads = [
threading.Thread(target=move_armlower2), # Creating threads
threading.Thread(target=move_armlower1)
]
for th in threads:
th.start() # Starts the thread
for th in threads:
th.join() # Waits for the thread to terminate