Libraries.Robots.Lego.Motor Documentation
This class is an object representation of a LEGO Mindstorms EV3 motor. It is used to control movement of the EV3 robot.
Example Code
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Utility
class Main
action Main
Motor motor
Utility utility
motor:SetSpeed(motor:MOTOR_A, 720) //two motors for moving the robot, connected to ports A and B
motor:SetSpeed(motor:MOTOR_B, 720) //these motors will fully rotate twice per second
motor:RotateForward(motor:MOTOR_A)
motor:RotateForward(motor:MOTOR_B)
utility:DelayMilliseconds(3000) //lets the motors rotate for 3 seconds
motor:Stop(motor:MOTOR_A)
motor:Stop(motor:MOTOR_B)
end
end
Inherits from: Libraries.Language.Object
Variables Table
Variables | Description |
---|---|
text MOTOR_D | This action sets the speed of a motor. Alone, this action does not cause a motor to move, but rather, it lets the motor know how fast to go when it moves. If this method is not called, motors will default to 50% of the max speed. |
text MOTOR_B | |
text MOTOR_C | |
text MOTOR_A |
Actions Documentation
Compare(Libraries.Language.Object object)
This action compares two object hash codes and returns an integer. The result is larger if this hash code is larger than the object passed as a parameter, smaller, or equal. In this case, -1 means smaller, 0 means equal, and 1 means larger. This action was changed in Quorum 7 to return an integer, instead of a CompareResult object, because the previous implementation was causing efficiency issues.
Parameters
- Libraries.Language.Object: The object to compare to.
Return
integer: The Compare result, Smaller, Equal, or Larger.
Example
Object o
Object t
integer result = o:Compare(t) //1 (larger), 0 (equal), or -1 (smaller)
Equals(Libraries.Language.Object object)
This action determines if two objects are equal based on their hash code values.
Parameters
- Libraries.Language.Object: The to be compared.
Return
boolean: True if the hash codes are equal and false if they are not equal.
Example
use Libraries.Language.Object
use Libraries.Language.Types.Text
Object o
Text t
boolean result = o:Equals(t)
GetHashCode()
This action gets the hash code for an object.
Return
integer: The integer hash code of the object.
Example
Object o
integer hash = o:GetHashCode()
GetRotation(text motorID)
This action will give the position of a motor based on how many degrees it has rotated.
Parameters
- text motorID: specifies the motor being checked for its position. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Return
integer: the position of the motor in degrees, based on how much it has rotated.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Sound
use Libraries.Robots.Lego.Utility
Motor motor
Sound sound
Utility utility
motor:SetSpeed(motor:MOTOR_D, 600) //moves at 600 degrees per second
motor:RotateForward(motor:MOTOR_D)
repeat while motor:GetRotation(motor:MOTOR_D) < 3600
sound:Beep()
utility:DelayMilliseconds(1000) //allows the motor to keep moving for a second before checking its rotation again
end
sound:Buzz()
GetRotationTarget(text motorID)
This action reports the target degree of a rotating motor.
Parameters
- text motorID: specifies which motor is being checked for its rotation target. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Return
integer: the degree that the motor is rotating to.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Sound
use Libraries.Robots.Lego.Screen
use Libraries.Robots.Lego.Button
Motor motor
Sound sound
Screen screen
Button button
motor:SetSpeed(motor:MOTOR_C, 500)
repeat while motor:GetRotationTarget(motor:MOTOR_C) < 1000 //repeat until motor C is attempting to go past 1000 degrees of rotation
sound:Beep()
motor:RotateByDegrees(motor:MOTOR_C, 100)
screen:ScrollUp("Target: " + motor:GetRotationTarget(motor:MOTOR_C))
end
motor:Stop(motor:MOTOR_C) //stop it from going past 1000
screen:ScrollUp("Press any button")
button:WaitForButtonPress()
GetSpeed(text motorID)
This action will give the speed associated with the motor requested.
Parameters
- text motorID: specifies the motor being checked for its speed. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Return
integer: the speed associated with the motor requested in a percentage of the motor's max speed, between 0 and 100.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Utility
Motor motor
Utility utility
motor:SetSpeed(motor:MOTOR_B, 50)
motor:SetSpeed(motor:MOTOR_C, 50)
repeat 5 times
motor:SetSpeed(motor:MOTOR_C, motor:GetSpeed(motor:MOTOR_C) + 10) //speeds up the motor rotation by 10% each iteration
motor:SetSpeed(motor:MOTOR_B, motor:GetSpeed(motor:MOTOR_B) + 10)
motor:RotateForward(motor:MOTOR_C)
motor:RotateForward(motor:MOTOR_B)
utility:DelayMilliseconds(1000) //lets the motors go forward for 1 second
end
IsMoving(text motorID)
This action is used to find out if a specific motor is currently moving or not. It can be used to detect if a motor is stalled. It takes about one second of a motor failing to move before it is determined to be stalled.
Parameters
- text motorID: specifies the motor being checked for movement. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Return
boolean: a boolean value where the value 'true' means the motor is moving, and the value 'false' means the motor is not moving (stalled).
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Button
use Libraries.Robots.Lego.Utility
Motor motor
Button button
Utility utility
motor:RotateByDegrees(motor:MOTOR_A, 1080)
button:SetLightPattern(button:SOLID_GREEN_LIGHT) //will stay on while the motor is moving
repeat while motor:IsMoving(motor:MOTOR_A)
utility:DelayMilliseconds(100) //check if the motor is moving every 100 milliseconds
end
button:SetLightPattern(button:SOLID_RED_LIGHT)
ResetRotation(text motorID)
This action resets the motor's memory of its current rotation. This will not cause the motor to rotate.
Parameters
- text motorID: specifies which motor to reset. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Sound
Motor motor
Sound sound
motor:SetSpeed(motor:MOTOR_A, 300)
motor:RotateToDegree(motor:MOTOR_A, 360) //after this, the motor's rotation is at 180 degrees
sound:Beep()
motor:ResetRotation(motor:MOTOR_A) //this will change the motor's rotation memory to 0, without moving the motor
motor:RotateToDegree(motor:MOTOR_A, 360) //since the motor's current degree was reset to 0, this will move it 180 degrees forward
sound:BeepTwice()
RotateBackward(text motorID)
This action will cause the specified motor to rotate backward until stopped by the Stop action, or if the program ends.
Parameters
- text motorID: represents which motor will be changed by this action. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.InfraredSensor
Motor motor
InfraredSensor infraredSensor
infraredSensor:SetPort(infraredSensor:PORT_1) //infrared sensor connected to port 1 of the robot
motor:RotateBackward(motor:MOTOR_A) //two motors for moving the robot, connected to ports A and D
motor:RotateBackward(motor:MOTOR_D)
repeat until infraredSensor:GetDistance() > 40 //repeat until the sensor gets far enough away from an object
end
motor:Stop(motor:MOTOR_A)
motor:Stop(motor:MOTOR_D)
RotateByDegrees(text motorID, number degrees)
This action rotates a motor by the amount of degrees specified
Parameters
- text motorID: specifies the motor that will rotate. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
- number degrees: tells the motor how many degrees to rotate by. Negative values will cause the motor to roatate backwards.
Example
use Libraries.Robots.Lego.Motor
Motor motor
motor:SetSpeed(motor:MOTOR_A, 75)
motor:SetSpeed(motor:MOTOR_B, 75) //two motors used to move the robot, connected to ports A and B
motor:RotateByDegrees(motor:MOTOR_A, 3600) //motor A rotates 10 full revolutions forward
motor:Wait(motor:MOTOR_A)
motor:RotateByDegrees(motor:MOTOR_B, -3600) //motor B rotates 10 full revolutions backward
motor:Wait(motor:MOTOR_B)
RotateForward(text motorID)
This action will cause the specified motor to rotate forward until stopped by the Stop action, or if the program ends.
Parameters
- text motorID: represents which motor will be changed by this action. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.InfraredSensor
Motor motor
InfraredSensor infraredSensor
infraredSensor:SetPort(infraredSensor:PORT_1) //infrared sensor connected to port 1 of the robot
motor:SetSpeed(motor:MOTOR_B, 720)
motor:SetSpeed(motor:MOTOR_C, 720)
motor:RotateForward(motor:MOTOR_B)
motor:RotateForward(motor:MOTOR_C)
repeat until infraredSensor:GetDistance() < 30 //repeat until the sensor is close to an object
end
motor:Stop(motor:MOTOR_B)
motor:Stop(motor:MOTOR_C)
RotateToDegree(text motorID, number degreeTarget)
This action causes a motor to move to a certain degree, based on its current rotation memory.
Parameters
- text motorID: specifies the motor that will rotate. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
- number degreeTarget: indicates what degree the motor should rotate to. Negative values can be used here.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.Utility
Motor motor
Utility utility
motor:SetSpeed(motor:MOTOR_C, 720)
motor:RotateByDegrees(motor:MOTOR_C, 360) //rotates one revolution
motor:Wait(motor:MOTOR_C)
utility:DelayMilliseconds(500)
motor:RotateToDegree(motor:MOTOR_C, 360) //will do nothing since the motor is already at that degree
motor:Wait(motor:MOTOR_C)
utility:DelayMilliseconds(500)
motor:RotateToDegree(motor:MOTOR_C, 720) //rotates one more revolution from its starting position of 360 degrees
motor:Wait(motor:MOTOR_C)
utility:DelayMilliseconds(500)
motor:RotateToDegree(motor:MOTOR_C, 0) //rotates backwards two revolutions from its current position of 720 degrees
motor:Wait(motor:MOTOR_C)
SetSpeed(text motorID, integer speed)
This action sets the speed of a motor. Alone, this action does not cause a motor to move, but rather, it lets the motor know how fast to go when it moves. If this method is not called, motors will default to 50% of the max speed.
Parameters
- text motorID: represents which motor will be changed by this action. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
- integer speed: represents how fast the motor will turn as a percentage of the max speed. The max speed will cause the motor to complete two revolutions per second. Valid speeds are integers between 0 and 100. The maximum speed is limited by battery voltage and how much the robot is already doing, so a speed of 100 may exceed the motor's capabilities under some conditions. In this case, the motor will just move as fast as it can.
Example
use Libraries.Robots.Lego.Motor
Motor motor
motor:SetSpeed(motor:MOTOR_C, 100) //two revolutions per second
motor:RotateByDegrees(motor:MOTOR_C, 720) //reaches rotation target in one second
motor:SetSpeed(motor:MOTOR_C, 50) //one revolution per second
motor:RotateByDegrees(motor:MOTOR_C, -720) //reaches rotation target in two seconds
Stop(text motorID)
This action causes a motor to stop moving.
Parameters
- text motorID: specifies which motor should be stopped.
Example
use Libraries.Robots.Lego.Motor
use Libraries.Robots.Lego.InfraredSensor
Motor motor
InfraredSensor infraredSensor
infraredSensor:SetPort(4)
repeat while true
if infraredSensor:GetRemoteCommand(infraredSensor:CHANNEL_1) = infraredSensor:BUTTON_TOP_LEFT
motor:RotateForward(motor:MOTOR_C)
else
motor:Stop(motor:MOTOR_C)
end
end
Wait(text motorID)
This action will cause the robot's program to wait until the specified motor stops moving.
Parameters
- text motorID: indicates which motor the robot's program should wait for before moving on. There are class constants that can be used here. Valid motor IDs are the capital letters A B C or D and correspond to the labelled ports on the EV3 brick.
Example
use Libraries.Robots.Lego.Motor
Motor motor
motor:SetSpeed(motor:MOTOR_A, 480) //two motors for moving the robot, connected to ports A and B
motor:SetSpeed(motor:MOTOR_B, 480)
motor:RotateForward(motor:MOTOR_A)
motor:RotateByDegrees(motor:MOTOR_B, 1440)
motor:Wait(motor:MOTOR_B) //motor A will continue moving during this time, as well
motor:Stop(motor:MOTOR_A)
On this page
Variables TableAction Documentation- Compare(Libraries.Language.Object object)
- Equals(Libraries.Language.Object object)
- GetHashCode()
- GetRotation(text motorID)
- GetRotationTarget(text motorID)
- GetSpeed(text motorID)
- IsMoving(text motorID)
- ResetRotation(text motorID)
- RotateBackward(text motorID)
- RotateByDegrees(text motorID, number degrees)
- RotateForward(text motorID)
- RotateToDegree(text motorID, number degreeTarget)
- SetSpeed(text motorID, integer speed)
- Stop(text motorID)
- Wait(text motorID)