import RPi.GPIO as GPIO
import time
import threading
import datetime
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
#set up GPIO pin outputs for servo motors
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
#set up pwm for the pins
pwm1 = GPIO.PWM(11, 50)
pwm2 = GPIO.PWM(13, 50)
pwm3 = GPIO.PWM(15, 50)
#set up controlling boolean values
boolean_1 = False
boolean_2= False
boolean_3= False
boolean_4= False
def function3():
global boolean_1 , pwm3
pwm3.start(0)
while move_forwardboolean_1:
for i in range(70, 110):
position = 1./18.*(i)+2
pwm3.ChangeDutyCycle(position)
time.sleep(0.015)
for i in range(110, 70, -1):
position = 1./18.*(i)+2
pwm3.ChangeDutyCycle(position)
time.sleep(0.015)
for i in range(70, 90):
position = 1./18.*(i)+2
pwm3.ChangeDutyCycle(position)
time.sleep(0.001)
pwm3.stop()
def function2():
global boolean_2, pwm1, pwm2
pwm1.start(0)
pwm2.start(0)
while boolean_2:
for i in range(60, 120):
position_1 = 1./18.*(i)+2
position_2 = 1./18.*(180-i)+2
pwm1.ChangeDutyCycle(position_1 )
pwm2.ChangeDutyCycle(position_2 )
time.sleep(0.005)
for i in range(120, 60, -1):
position_1 = 1./18.*(i)+2
position_2 = 1./18.*(180-i)+2
pwm1.ChangeDutyCycle(position_1 )
pwm2.ChangeDutyCycle(position_2 )
time.sleep(0.05)
pwm1.stop()
pwm2.stop()
def function1():
global boolean_1 , boolean_3 , boolean_4
t_start = datetime.datetime.now()
start_time = (round(t_start.microsecond/1000000) + t_start.second + t_start.minute*60 + t_start.hour*3600)
boolean_1 = True
t1 = threading.Thread(target = function3, args=())
t1.start()
t2 = threading.Thread(target = function5, args=())
t3 = threading.Thread(target = function4, args=())
while True:
t_cur = datetime.datetime.now()
current_time = (round(t_cur.microsecond/1000000) + t_cur.second + t_cur.minute*60 + t_cur.hour*3600)
if((current_time - start_time) < 10):
if not boolean_3 :
boolean_3 = True
t2.start()
elif((current_time - start_time) >= 10 and (current_time - start_time) < 20):
if boolean_3 :
boolean_3 = False
t2.join()
if not boolean_4 :
boolean_4 = True
t3.start()
elif((current_time - start_time) >= 20):
boolean_4 = False
t3.join()
boolean_1 = False
t1.join()
break
def function4():
global boolean_4
pwm2.start(0)
while boolean_4:
for i in range(60, 120):
position = 1./18.*(180-i)+2
pwm2.ChangeDutyCycle(position)
time.sleep(0.001)
for i in range(120, 60, -1):
position = 1./18.*(180-i)+2
pwm2.ChangeDutyCycle(position)
time.sleep(0.01)
pwm2.stop()
def function5():
global boolean_3
pwm1.start(0)
while boolean_3:
for i in range(60, 120):
position = 1./18.*(i)+2
pwm1.ChangeDutyCycle(position)
time.sleep(0.001)
for i in range(120, 60, -1):
position = 1./18.*(i)+2
pwm1.ChangeDutyCycle(position)
time.sleep(0.01)
pwm1.stop()
def function_controll():
global boolean_2
t5 = threading.Thread(target = function1, args=())
t5.start()
t5.join()
boolean_2 = True
function2()
boolean_2= False
if __name__ == "__main__":
t1 = threading.Thread(target = function_controll, args=())
t1.start()
t1.join()
GPIO.cleanup()
I have updated..