74 Commits
Author SHA1 Message Date
Laurens Valk c14f1cf473 api/hubs/MoveHub: add basic imu
This is similar to the other hubs, but with reduced functionality.
2021-02-17 23:23:40 +01:00
Jerry Nicholls 6ce8336c26 doc/common/Motor: fix docstring for run_target
Changed "does" to "doesn't" for the target angle. The sign of the speed is irrelevant.
2021-02-15 19:12:41 +01:00
Laurens Valk fc04059d86 doc/parameters/Button: move doc to rst 2021-02-14 19:00:45 +01:00
Laurens Valk e7dc4bb609 doc/parameters/Side: move doc to rst 2021-02-14 18:41:17 +01:00
Laurens Valk a7699d6546 api/common/Control: add load method 2021-02-10 18:49:51 +01:00
Laurens Valk 55c83cb026 api/common: add torque limit setter
Also document units of torque
2021-02-10 15:48:56 +01:00
Laurens Valk 21e5400ff3 api/common/IMU: publish draft API 2021-01-19 15:09:06 +01:00
Laurens Valk db4cbe66c1 all: update copyright year 2021-01-18 14:34:28 +01:00
Laurens Valk 400067c364 doc/hubs/ev3brick: use footnote instead of toggle
This is a way to make the language list non-distracting without the contentui plugin
2021-01-12 16:50:18 +01:00
Laurens Valk 1f991302e5 doc/common: fix unit of acceleration 2021-01-05 16:31:35 +01:00
Laurens Valk a2583944d9 api/geometry: move Axis from parameters
This location makes more sense. Also drop Axis.ANY = None, which is more confusing than helpful. Instead, use relevant docstring to explain what None will do.
2021-01-04 17:25:15 +01:00
Laurens Valk 755d0520a6 api/parameters/Button: pass buttons on init
This matches the implementation.
2020-12-30 12:39:06 +01:00
Laurens Valk 8a1716d5e2 api/common/Keypad: change return type to tuple
This follows an implementation change that was made for performance reasons (https://github.com/pybricks/pybricks-micropython/commit/95741ac2f8f118396a517a38f4d0f7fb92136f82).
2020-12-23 11:45:37 +01:00
Laurens Valk abe4c1bc9a doc/common/Keypad: fix name
Keypad is one word, so the class is not spelled KeyPad.
2020-12-23 11:43:48 +01:00
Laurens Valk c3fc818037 doc/common/Speaker: move note information back
We were hiding this under a toggle menu to reduce the page size of the hubs module. Now that each hub is on its own page, this is no longer necessary.

In turn, this makes it easier to document the same method for other hubs.
2020-12-18 13:32:18 +01:00
Laurens Valk 983562f7b8 doc/hubs/inventorhub: document light, display, buttons 2020-11-06 15:59:02 +01:00
Laurens Valk 22a057d6e3 doc/common/LightGrid: existing pixels do not re-orient
This is currently a limitation of the implementation, and may be changed later on.
2020-11-06 15:22:00 +01:00
Laurens Valk 8f21cea345 api/common: clean up Light Matrix
This renames the generic class from LightGrid to LightMatrix. The instance object is simply called display.

This makes user scripts easier to type and read.

This also cleans up most of the draft docstrings for this class and fixes a few argument typos.
2020-11-06 12:31:42 +01:00
Laurens Valk cb91368b32 api/common/LightGrid: add orientation setter 2020-11-06 12:31:42 +01:00
Laurens Valk c3eb31d348 doc/common: fix cross references 2020-10-09 19:58:35 +02:00
Laurens Valk 4f27a465c4 api/common/LightGrid: drop on() method
This method is inconsistent with the on methods for other light related classes so it is better to delete it.
2020-08-25 16:27:19 +02:00
Laurens Valk f490a3b2c2 api/common/LightArray: add blink and animate 2020-08-25 16:27:19 +02:00
Laurens Valk b89da4b061 api/common/ColorLight: add blink and animate
These are the generalizations of the corresponding methods for single color lights.
2020-08-25 13:38:09 +02:00
Laurens Valk b974ead0dc api/common/ColorLight: drop hsv function
The on() method takes a color type, which is an HSV color, so a separate hsv method is not needed.

hub.light.on(Color.GREEN)
hub.light.on(Color(120))
hub.light.on(Color(h=120, s=100, 50))
2020-08-25 13:38:09 +02:00
Laurens Valk 0427436df6 doc/common/LightGrid: clarify how blink and pattern relate
blink is just a simpler animation
2020-08-25 13:38:09 +02:00
Laurens Valk 4319b2fad8 api/common/Light: add blink and animate 2020-08-25 13:38:09 +02:00
Laurens Valk 0fb150be19 api/common/LightGrid: add animate method 2020-08-25 13:37:54 +02:00
Laurens Valk 6d0984f5fc api/common/LightGrid: simplify image method
Now it just displays a Matrix/2D list. We can omit manipulations like clear=False. Composing can be done by simply adding two matrices instead.

We also drop the compressed format. Instead we could have a helper function that gives you a
matrix based on a list of integers in the now-deleted format.
2020-08-25 12:42:14 +02:00
Laurens Valk b708fe283c api/common/LightGrid: rename char argument
This follows a change in the unreleased implementation.
2020-08-25 12:42:14 +02:00
Laurens Valk 74d59b43ac api/common/LightGrid: revise text method
Specify on and off time for consistency with future blink method.

Adding some off time helps reading text with subsequent charachters that are the same. For example, now "Hello" reads H e l l o instead of Helo.

Also drop wait argument for now because it is not currently implemented and may never be.
2020-08-25 12:42:10 +02:00
Laurens Valk 55c4c86c23 api/_common: fix speaker file kwarg
In the implementation, the kwarg is called "file". Instead of fixing the implementation which is already released, we fix the docs.
2020-07-07 09:50:36 +02:00
Laurens Valk 8078b6febb doc/_common/ColorLight: docstring clean up
This adds a (commented out) preview of the methods to the city hub light
2020-07-07 09:44:16 +02:00
Laurens Valk 8a43dc936a doc/signaltypes: add hue placeholder
We will have to add a helpful diagram, but having the placeholder allows us to link to it already.
2020-07-07 09:44:16 +02:00
Laurens Valk 7d1fbe9ce9 api/_common/Light: add reset to system behavior
This makes lights behave as they would if the user script did not use them at all.
2020-07-07 09:44:16 +02:00
Laurens Valk 38a1cf9712 api/_common/Light: drop repeat kwarg
The pattern will always repeat, for simplicity.
2020-07-07 09:44:16 +02:00
Laurens Valk 102039385a api/_common/ColorLight: add pattern
This adds the method equivalent to the recent addition of a single
color light. The only difference is that now a color is returned instead
of a single brightness. The provided color or HSV tuple will be stored
as RGB samples internally, as is already done for pbio light patterns.

In the simplest blinking form this could be:

hub.light.pattern(lambda t: Color.RED if t >= 1000 else None, 2000)

Or a fading, one-color sine:

def fade(time):
    v = sin(time/2000/pi)*50+50
    h = 360
    s = 100
    return (h, s, v)

hub.light.pattern(fade, 1000)
2020-07-07 09:44:16 +02:00
Laurens Valk e780a65007 api/_common/ColorLight: change rgb to hsv
This makes it much easier to have fine grained control
over colors and cycle through them easily (0--360).

This also makes it consistent with sensor APIs. Now you
can measure the color and plug it into this method.

We can make this change because none of
the implementations use this yet.

If we feel we miss out by dropping the RGB, it would be more fitting
to instead expose R, G, and B attributes which point to instances of
the Light class. However, this is using more memory for something that
isn't very useful.

We could also just provide generic color converters between rgb, hsv,
and perhaps hex html color strings, not tied to any particular light or
sensor.
2020-07-07 09:44:16 +02:00
Laurens Valk b8505ff218 api/_common/Light: introduce pattern
Currently, Pybricks has system patterns for builtin lights.
This adds a user method to set such a pattern.

For example, an indefinite sine pattern could be specified by

def fade(time):
    return sin(time/2000/pi)*50+50

hub.light.pattern(fade, 1000)

or a blinking pattern using

def blink(time):
    if time >= 1000:
        return 100
    else:
        return 0

hub.light.pattern(blink, 2000)

or briefly:

hub.light.pattern(lambda t: 100 if t >= 1000 else 0, 2000)

This combines the best of simplicity and efficiency: The user doesn't
have to calculate and provide an expensive list of floating points, but
provide a clean and adaptable method instead.
By sampling, we maintain a fixed length pattern which we can preallocate
for the hub lights, and the samples are calculated only once and the
callable may be garbage collected if given as lambda. Also, any
exceptions will be caught immediately during the one-off evaluation.
2020-07-07 09:44:16 +02:00
Laurens Valk 20fec6461a api/_common/LightGrid: make image more efficient
Usually, images are static, so they can be computed in advance instead of during runtime. This makes scripts smaller and much more memory efficient.

For example, now you can say:

HOUSE = 4685823

hub.grid.image(HOUSE)

since 4685823 =
```
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
```

We could also choose the binary format to allow for more generic screen sizes. If we allow a bit more space (2 words instead of 1), we could do 1 byte per row to allow screens up to 8x8. Right now, though, we choose 1 word < 31 bits which is a bit more efficient in MicroPython.

We can easily list numerous example in the docs or provide a simple visual calculator.

There is still a matrix method that takes a 2D matrix of intensities for full control during runtime, which is what the image() method was doing initially. This commit renames the old draft to matrix().
2020-07-07 09:44:16 +02:00
Laurens Valk 80840396aa api/pupdevices: add Powered Up Light 2020-06-08 15:26:19 +02:00
Laurens Valk 7498751ee3 doc/pupdevices: add diagrams with light indices
Make this clear once and for all.
This order comes from the sensor itself.
2020-05-27 13:58:30 +02:00
Laurens Valk 2d3e85f531 api/_common.LightArray: merge on and array method
Make it simpler with only one method to turn the lights on.
2020-05-27 13:58:30 +02:00
Laurens Valk 4de436e479 doc/motors: hide extra sections until ready
Avoid references to non-existing explanations.
2020-04-24 12:00:26 +02:00
David Lechner 87c2b6857f api: Use leading _ to hide internals in intellisense
Intellisense in VS Code (both jedi and ms python language server) picks
up all imported names and suggests them with equal priority for
code completion. By adding a leading underscore, intellisense lists
these with a lower priority, so they don't get in the way.

Also rename from builtins to _common while we are touching this to
better reflect the intention of the module (it contains types shared
by multiple modules, not builtin types like int).
2020-03-25 20:24:32 +01:00
Laurens Valk 529f8fe31c api: rename _common to builtins
Because this module describes devices that can be built into a hub or other device.

Since this design is now explicitly shown in
the docs as well, we don't need to hide this
module in the package.
2019-10-18 16:05:23 +02:00
Laurens Valk f5762447b4 doc: take sphinx workarounds out of api 2019-10-18 15:11:20 +02:00
Laurens Valk 5812333119 api: EV3Brick as class instead of module 2019-10-18 14:47:48 +02:00
Laurens Valk b5c9e3feb7 api: add simpler method for tilt
Provides a way of basic orientation checking independently of reference frame settings.
2019-07-04 11:55:01 +02:00
Laurens Valk d198c45845 api: add heading for devices with a gyro 2019-07-02 14:07:36 +02:00
Laurens Valk aa10118cfe api: add gestures 2019-07-02 13:49:52 +02:00