각각의 코드를 동시에 실행시키는 방법이 궁금합니다.
조회수 866회
안녕하세요. 취미로 자율주행자동차를 간단하게 만들어 보기 위해 프로젝트를 시작한 대학생입니다. 우선 파이썬에 대한 개념도 아직 부족한 상황이고 겨우 dc모터만을 이용해 자동차가 직진할 수 있는 코드와 서보모터를 이용해 방향을 바꿀 수 있는 코드를 짜 놓은 상황입니다. 하지만 그 두 코드를 동시에 돌리기 위한 코딩을 짜기 어려워 도움을 구하고자 합니다. 인터넷에 있는 많은 예제들과 강의들을 봤지만 생각보다 간단했고 그 코드로 응용하기가 어려웠습니다.. 상세한 도움 부탁드립니다. 아래 코드는 dc모터와 서보모터의 코드입니다. 그리고 멀티프로세싱과 멀티쓰레드의 차이점이나 어떤 것이 왜 쓰여야 하는지도 이해하기 쉽게 알려주시면 정말 감사하겠습니다.
- dc모터
import wiringpi
STOP = 0 FORWARD = 1
CH1 = 0 CH2 = 1
OUTPUT = 1 INPUT = 0
HIGH = 1 LOW = 0
ENA = 25 ENB = 30
IN1 = 24 IN2 = 23 IN3 = 22 IN4 = 21
def setPinConfig(EN, INA, INB): wiringpi.pinMode(EN, OUTPUT) wiringpi.pinMode(INA, OUTPUT) wiringpi.pinMode(INB, OUTPUT) wiringpi.softPwmCreate(EN, 0, 255)
def setMotorContorl(PWM, INA, INB, speed, stat):
wiringpi.softPwmWrite(PWM, speed)
if stat == FORWARD:
wiringpi.digitalWrite(INA, HIGH)
wiringpi.digitalWrite(INB, LOW)
elif stat == STOP:
wiringpi.digitalWrite(INA, LOW)
wiringpi.digitalWrite(INB, LOW)
def setMotor(ch, speed, stat): if ch == CH1: setMotorContorl(ENA, IN1, IN2, speed, stat) else: setMotorContorl(ENB, IN3, IN4, speed, stat)
wiringpi.wiringPiSetup()
setPinConfig(ENA, IN1, IN2) setPinConfig(ENB, IN3, IN4)
setMotor(CH1, 150, FORWARD) setMotor(CH2, 150, FORWARD)
wiringpi.delay(5000)
setMotor(CH1, 150, STOP) setMotor(CH2, 150, STOP)
- 서보
import RPi.GPIO as GPIO import time
pin_pwm = 18 # pwm pin number frequency = 50 # frequency 50 Hz
GPIO.setmode(GPIO.BCM) GPIO.setup(pin_pwm, GPIO.OUT)
p = GPIO.PWM(pin_pwm, frequency) p.start(0)
try:
dc = 0 # duty cycle
min_dc = 2.2 # minimum value of duty cycle
max_dc = 11.5 # maximum value of duty cycle
change_step = 10 # duty cycle change step
change = float((max_dc-min_dc)/change_step) # change rate
toggle = 1 # come and go toggle
delay = 0.4 # time delay b/w duty cycle change
dc = min_dc # initial duty cycle value is min_dc
# show setting values
print("min duty cycle = %.2f" % min_dc)
print("max duty cycle = %.2f" % max_dc)
print("duty cycle change = %.2f" % change)
print("change delay = %.2f" % delay)
while True:
p.ChangeDutyCycle(dc)
# show current angle
print('angle: %d ' % ((dc-min_dc)*180/(max_dc-min_dc)-90), end='\r')
time.sleep(delay)
# to make servo moves like windscreen wiper
if dc + change <= max_dc and toggle:
dc += change
elif dc - change >= min_dc:
dc -= change
toggle = 0
else:
dc += change
toggle = 1
"ctrl + c" to stop
except KeyboardInterrupt: p.stop() GPIO.cleanup()
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력