BASIC4MCU | 질문게시판 | pymata 라인 following 질문
페이지 정보
작성자 금재 작성일2020-12-16 01:38 조회2,844회 댓글1건본문
라즈베리 파이를 아두이노와 연결한후 아두이노에 pymata를 업로드하고 파이썬을 이용해 로봇 line following을 구현하고 있습니다.
from PyMata.pymata import PyMata
import time
trig=9
echo=8
PWMA = 3 # PWM control (speed) for motor A - RIGHT WHEEL
DIRA = 12 # Direction control for motor A
PWMB = 11 # PWM control (speed) for motor B - LEFT WHEEL
DIRB = 13 # Direction control for motor B
# Motor settings
CW = 1 # clockwise
CCW = 0 # counter-clockwise
MOTOR_LEFT = 0 # left motor
MOTOR_RIGHT = 1 # right motor
# connection port
PORT = '/dev/ttyACM0'
# Create PyMata instance
board = PyMata(PORT, verbose=True)
def readIrSensor(pin):
value = 1023 - board.analog_read(pin)
return value
def colorFinder(sensorValue):
THRESHOLD_IR = 800
WHITE = 1
BLACK = 0
color = WHITE if sensorValue > THRESHOLD_IR else BLACK
return color
#Ultrasonic sensor
board.sonar_config(trig,echo)
time.sleep(1)
while True:
data = board.get_sonar_data()
distance= data[trig]
print 'distance: {} cm'.format(distance[1])
time.sleep(.1)
# Set analog pins 0 and 1 to be analog input pins
board.set_pin_mode(rightIrSensorPin,board.INPUT,board.ANALOG)
board.set_pin_mode(leftIrSensorPin,board.INPUT,board.ANALOG)
# Set motor pwm & directions
def setMotor(PWM, DIR):
board.set_pin_mode(PWM,board.PWM,board.DIGITAL)
board.set_pin_mode(DIR,board.OUTPUT,board.DIGITAL)
#time.sleep(0.5)
def setRightAndLeftMotors():
setMotor(PWMA,DIRA)
setMotor(PWMB,DIRB)
# Drive Motor
def driveMotor(motor, direction, speed):
if (motor == MOTOR_RIGHT):
board.analog_write(PWMA,speed)
board.digital_write(DIRA,direction)
elif (motor == MOTOR_LEFT):
board.analog_write(PWMB,speed)
board.digital_write(DIRB,direction)
# Robot Motion Control
def robotForward(power):
driveMotor(MOTOR_RIGHT,CCW,power)
driveMotor(MOTOR_LEFT,CW,power)
def robotBackward(power):
driveMotor(MOTOR_RIGHT,CW,power)
driveMotor(MOTOR_LEFT,CCW,power)
def robotRight(power):
driveMotor(MOTOR_RIGHT,CW,power)
driveMotor(MOTOR_LEFT,CW,power)
def robotLeft(power):
driveMotor(MOTOR_RIGHT,CCW,power)
driveMotor(MOTOR_LEFT,CCW,power)
def robotStop():
power = 0
driveMotor(MOTOR_RIGHT,CW,power)
driveMotor(MOTOR_LEFT,CW,power)
def robotControl(colorLeftSensor, colorRightSensor):
if colorLeftSensor == 0 and colorRightSensor == 0 :
robotForward(100)
elif colorLeftSensor == 0 and colorRightSensor == 1 :
robotLeft(100)
elif colorLeftSensor == 1 and colorRightSensor == 0 :
robotRight(100)
else:
robotStop()
def Avoidence():
# Set Right and Left Motors
setRightAndLeftMotors()
while True:
data = board.get_sonar_data()
dist = data[trig]
print 'distance: {} cm'.format(dist[1])
time.sleep(1)
if distance > 10 :
Avoidence()
# Read IR sensor values
rightIrSensor = readIrSensor(rightIrSensorPin)
leftIrSensor = readIrSensor(leftIrSensorPin)
# Find color
colorRightSensor = colorFinder(rightIrSensor)
colorLeftSensor = colorFinder(leftIrSensor)
robotControl(colorLeftSensor, colorRightSensor)
위 코드를 실행했을 때 자꾸 syntax 에러가 납니다. 코드에서 틀린 부분이 있으면 알려주실 수 있을까요?
댓글 1
조회수 2,844master님의 댓글
master 작성일
파이썬을 사용하지 않아서 도움을 드리지 못합니다.
에러메시지를 확인한 후 웹검색해서 찾아보세요