aboutsummaryrefslogtreecommitdiff
path: root/docs/Scripting/SupportLib/README.md
blob: c2c7a99508757e2965dae5b02761d9e8ab02fb77 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# Support Library

The script/mode file has to contain a `Main` class, which is inherited from `NeoBehaviour` like this:
```python
from luxcena_neo import NeoBehaviour

class Main(NeoBehaviour):
    def on_start(self):
        strip.setPixelColor(0, "#fafafa")
    
```
The `strip` will be available anywhere in your script whe it is started using `neo_runtime`.

---

## `class` NeoBehaviour
This is the class your `Main` should inherit from.
This has some special methods that you can override.

*NOTE:* Do not override `__init__` unless you know
what you are doing! This contains code that
is crucial for `neo_runtime`.

### def declare_variables(`self`)
When the runtime executes this, the method `self.declare(Variable)` is available. This is where
you can add variables that show up in the UI.
Take a look at the `Variable` class further down on this site.

### def on_start(`self`)
This is run once at the start of the program. This is a logical place
to initialize variables where you need to remember state, but you
don't want to put the variable in the UI.

### def each_tick(self):
This will run as often as possible. If nothing else happens, it will run every one millisecond.

### def each_second(self):
This will run at most once a second, it might be longer if some other function is doing some work that takes a long time (more that a second).

### def each_minute(self):
This will run at most once a minute, it might be longer if some other function is doing some work that takes a long time (more that a minute).

### def each_hour(self):
This will run at most once a hour, it might be longer if some other function is doing some work that takes a long time (more that a hour).

### def each_day(self):
This will run at most once a day, it might be longer if some other function is doing some work that takes a long time (more that a day).

### deltatime
For each of the `each_` methods, you can add a second argument to the 
definition. If you do, that will be the time in seconds since last time
the function ran.
```python
def each_tick(self, dt):
    print(dt)
def each_minute(self, deltatime):
    print(dt)
```
The name of the parameter doesn't matter. For the example above,
in an ideal world, this would print `0.1` every millisecond, and `60` every minute. Because the world isnt ideal, the deltatime is likely
going to be slightly longer than the ideal.

---

## `class` Strip
This is the object you are refeering to when you want to do things with LED's.
You shouldn't have to do instantiate your own new strip-object as you can use the one
set up by the software itself.


### strip.show()
Display all the changes made to the LEDs, on the actual LEDs.

### strip.set_pixel_color(`n`, `*color`)
Set LED at position n to the provided 24-bit color value (in RGB order).

### strip.set_pixel_color_XY(`x`, `y`, `*color`)
Set LED at position (x, y) in the defined matrix to the provided 24-bit color value (in RGB order).

### strip.set_segment_color(`segment`, `*color`)
Set a whole segment to the provided red, green and blue color.
Each color component should be a value from 0 to 255 (where 0 is the
lowest intensity and 255 is the highest intensity).

### strip.get_pixels():
Return an object which allows access to the LED display data as if
it were a sequence of 24-bit RGB values.

### strip.num_pixels():
Return the number of pixels in the display.

### strip.get_pixel_color(`n`)
Get the 24-bit RGB color value for the LED at position n.

## `*color``
All functions that take in this, will automatically parse the value provided.

If parameter is only a str, it will be treated as a hex value. e.g. `set_pixel_color(0, "#fafafa")`
If parameter is a tuple, the first three items in that tuple will be treated as a rgb value. e.g. `set_pixel_color(0, (255, 238, 10))`
If parameter is a int, it will be treated as a 24-bit color value. e.g. `set_pixel_color(0, 2812873)`
If there are 3 parameters, these will be treated as a rgb value. e.g. `set_pixel_color(0, 255, 238, 10)`
This means that all of these have the same effect:
```python
set_pixel_color(0, "#fafafa")
set_pixel_color(0, 16448250)
set_pixel_color(0, 250, 250, 250)
set_pixel_color(0, (250, 250, 250))
```

---

These are in `utils`, can be imported with `from luxcena_neo import utils`.

## utils.hex_to_rgb(`value`)
Convert provided hex color to a tuple with rgb colors. (r, g, b).

## utils.rgb_to_hex(`rgb`)
Converts rgb colors in tuple to hex string.

## utils.rgb_from_twentyfour_bit(`color`)
Takes a 24bit color value and returns a rgb tuple.

## utils.rgb_from_twentyfour_bit(`color`)
Takes a 24bit color value and returns a hex string.