DylDev
DylDev

Reputation: 13

Mindstorms EV3 (Micro Python) - Motor.run() not working

I have a Lego Mindstorms EV3 running MicroPython. When I try to use this code, it does not work:

#!/usr/bin/env pybricks-micropython
from pybricks.robotics import DriveBase, Stop
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor, InfraredSensor
from pybricks.parameters import Port, Direction
from pybricks.tools import wait

# Initialize the EV3 Brick.
ev3 = EV3Brick()

# Initialize Wheels
RightWheel = Motor(Port.B)
LeftWheel = Motor(Port.C)
Robot = DriveBase(LeftWheel, RightWheel, 275.2, 165)
Robot.settings(straight_speed=1000)

# Initialize Motors and Sensors
blade_motor = Motor(Port.D, positive_direction=Direction.CLOCKWISE, gears=None)
infrared_sensor = InfraredSensor(Port.S1)
pressed = infrared_sensor.keypad()

# Play a sound to tell us when we are ready to start moving
ev3.speaker.beep()

LeftWheel.run(1000)

If I replace python LeftWheel.run(1000) with python LeftWheel.run_time(1000, 5000) It works perfectly.

I have no idea why this would happen, I have looked everywhere, and it seems to be just me that is having this issue.

Upvotes: 0

Views: 265

Answers (2)

cHa
cHa

Reputation: 1

You make a DriveBase object using two Motor objects called RightWheel and LeftWheel. You cannot use these motors individually while the DriveBase is active.

The DriveBase is active if it is driving, but also when it is actively holding the wheels in place after a straight() or turn() command. To deactivate the DriveBase, call stop(). Try this. enter code here ....

# Initialize Wheels
RightWheel = Motor(Port.B)
LeftWheel = Motor(Port.C)
Robot = DriveBase(LeftWheel, RightWheel, 275.2, 165)
Robot.settings(straight_speed=1000)

Robot.stop()
LeftWheel.run(1000)

Upvotes: 0

Laurens Valk
Laurens Valk

Reputation: 91

When the program ends, the motors stop.

So if LeftWheel.run(1000) is the last thing in your program, nothing appears to happen because the motors stop right away.

It is not recommended to restart run over and over in a loop with the same speed as suggested in another answer. This is only useful if you want to change the speed continuously, like when following a line.

Instead, try putting something else after the motor command, like waiting or sounds. Anything that prevents the program from ending right away will do.

LeftWheel.run(1000)
for i in range(10):
    ev3.speaker.beep()
    wait(1000)

Upvotes: 1

Related Questions