Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env pybricks-micropython
- from pybricks.hubs import EV3Brick
- from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
- InfraredSensor, UltrasonicSensor, GyroSensor)
- from pybricks.parameters import Port, Stop, Direction, Button, Color
- from pybricks.tools import wait, StopWatch, DataLog
- from pybricks.robotics import DriveBase
- from pybricks.media.ev3dev import SoundFile, ImageFile
- # This program requires LEGO EV3 MicroPython v2.0 or higher.
- # Click "Open user guide" on the EV3 extension tab for more information.
- ev3 = EV3Brick()
- ultrasonic = UltrasonicSensor(Port.S4)
- sensor = ColorSensor(Port.S2)
- my_left_kidney_ran_away_from_home_and_i_am_really_sad = Motor(Port.C)
- right_motor = Motor(Port.B)
- sacrifice = Motor(Port.A)
- devil = DriveBase(my_left_kidney_ran_away_from_home_and_i_am_really_sad, right_motor, wheel_diameter=57.15, axle_track=88.9)
- one = 1 or 2
- # 1 & 2 tend to be the line's defined values, so its defined as a "or" so the program checks for both values within the loops
- t = 60
- w = 500
- noturning = 1
- # This loop is for debugging. You can view the current reflection and adjust values based off it.
- # You can hit center to exit debugger. In Visual Code, highlighting it and pressing Ctrl+/ will uncomment it.
- ev3.speaker.beep()
- print('Program start')
- devil.reset()
- while True:
- while noturning == 0:
- print ('#1,', sensor.reflection())
- if ultrasonic.distance() <= 150:
- noturning = 1
- elif sensor.reflection() == one:
- devil.drive(150, 0)
- elif sensor.reflection() == 0:
- devil.drive(0, 120)
- print("No line nor paper detected.")
- else:
- while sensor.reflection() > one:
- print ('#2,', sensor.reflection())
- devil.drive(0, t)
- if sensor.reflection() == one:
- break
- wait(w)
- devil.drive(0, -t)
- if sensor.reflection() == one:
- break
- wait(w)
- devil.drive(0, -t)
- if sensor.reflection() == one:
- break
- wait(w)
- devil.drive(0, t)
- if sensor.reflection() == one:
- break
- wait(w)
- t = t + 10
- if t <= 90:
- w = w + 10
- elif t >= 120:
- w = w + 25
- # If the turn amount is still under 120 per turn, it only adds a wait amount of 10(ms)
- # Once it goes above 120, it starts adding 25(ms) as a result of the wider turns. The wider turns make it harder for the sensor to update fast enough.
- while noturning == 1:
- devil.straight(-10)
- devil.turn(180)
- wait(500)
- noturning = 0
Advertisement