mirror of
https://github.com/undera/pylgbst.git
synced 2020-11-18 19:37:26 -08:00
* It's HUB ID * Rename file * Working with official doc * Some progress * AttachedIO msg * device action impl * some better device alert impl * restructuring * Some port commands handled * Some command feedback waiting * Some more request-reply things * Some more request-reply things * Reworked msg classes * Getting back to UTs * Getting back to UTs * Facing sync lock problems * Facing sync lock problems * Testing it * Covering more with tests * handle actions * Hub class is almost covered * done coverage for Hub * done coverage for MoveHub * Button is tested * remove debug server from examples * Current and voltage tested * color sensor basic test * cover tilt sensor * motor sensor tested * constant motor * motor is tested * hold_speed impl for motor * motor commands recorded * some cleanup * some cleanup * some cleanup * debug * debug * FIX a bug * acc/dec profiles figured out * UT motor ops * UT motor ops * Get rid of weird piggyback * fix UT * Fix encoding? * fix test mb * More robust * Checked demo works * cosmetics * cosmetics * Maybe better test * fetching and decoding some device caps * describing devs * describing devs works * Applying modes we've learned * Simple and extensible dev attach * Reworking peripherals based on modes * Applying modes we've learned * implemented getting sensor data * fixed port subscribe * Added led out cmds on vision sensor * Worked on color-distance sensor * Introduce some locking for consistency * Improved it all * Travis flags * improve * improve * improve docs
56 lines
1.8 KiB
Markdown
56 lines
1.8 KiB
Markdown
# Motors
|
|
|
|

|
|
|
|
## Controlling Motors
|
|
|
|
Methods to activate motors are:
|
|
- `start_speed(speed_primary, speed_secondary)` - enables motor with specified speed forever
|
|
- `timed(time, speed_primary, speed_secondary)` - enables motor with specified speed for `time` seconds, float values accepted
|
|
- `angled(angle, speed_primary, speed_secondary)` - makes motor to rotate to specified angle, `angle` value is integer degrees, can be negative and can be more than 360 for several rounds
|
|
- `stop()` - stops motor
|
|
|
|
Parameter `speed_secondary` is used when it is motor group of `motor_AB` running together. By default, `speed_secondary` equals `speed_primary`.
|
|
|
|
Speed values range is `-1.0` to `1.0`, float values. _Note: In group angled mode, total rotation angle is distributed across 2 motors according to motor speeds ratio, see official doc [here](https://lego.github.io/lego-ble-wireless-protocol-docs/index.html#tacho-math)._
|
|
|
|
An example:
|
|
```python
|
|
from pylgbst.hub import MoveHub
|
|
import time
|
|
|
|
hub = MoveHub()
|
|
|
|
hub.motor_A.timed(0.5, 0.8)
|
|
hub.motor_A.timed(0.5, -0.8)
|
|
|
|
hub.motor_B.angled(90, 0.8)
|
|
hub.motor_B.angled(-90, 0.8)
|
|
|
|
hub.motor_AB.timed(1.5, 0.8, -0.8)
|
|
hub.motor_AB.angled(90, 0.8, -0.8)
|
|
|
|
hub.motor_external.start_speed(0.2)
|
|
time.sleep(2)
|
|
hub.motor_external.stop()
|
|
```
|
|
|
|
|
|
## Motor Rotation Sensors
|
|
|
|
Any motor allows to subscribe to its rotation sensor. Two sensor modes are available: rotation angle (`EncodedMotor.SENSOR_ANGLE`) and rotation speed (`EncodedMotor.SENSOR_SPEED`). Example:
|
|
|
|
```python
|
|
from pylgbst.hub import MoveHub, EncodedMotor
|
|
import time
|
|
|
|
def callback(angle):
|
|
print("Angle: %s" % angle)
|
|
|
|
hub = MoveHub()
|
|
|
|
hub.motor_A.subscribe(callback, mode=EncodedMotor.SENSOR_ANGLE)
|
|
time.sleep(60) # rotate motor A
|
|
hub.motor_A.unsubscribe(callback)
|
|
```
|