@@ -15,14 +15,16 @@ def __init__(self):
15
15
self .packeter = ucPack (200 )
16
16
self .left_wheel = ArduinoAlvikWheel (self .packeter , ord ('L' ))
17
17
self .right_wheel = ArduinoAlvikWheel (self .packeter , ord ('R' ))
18
+ self .led_state = [None ]
19
+ self .left_led = ArduinoAlvikRgbLed (self .packeter , 'left' , self .led_state , rgb_mask = [0b00000100 , 0b00001000 , 0b00010000 ])
20
+ self .right_led = ArduinoAlvikRgbLed (self .packeter , 'right' , self .led_state , rgb_mask = [0b00100000 , 0b01000000 , 0b10000000 ])
18
21
self ._update_thread_running = False
19
22
self ._update_thread_id = None
20
23
self .l_speed = None
21
24
self .r_speed = None
22
25
self .battery_perc = None
23
26
self .touch_bits = None
24
27
self .behaviour = None
25
- self .led_state = None
26
28
self .red = None
27
29
self .green = None
28
30
self .blue = None
@@ -149,37 +151,61 @@ def _set_leds(self, led_state: int):
149
151
5->right_red 6->right_green 7->right_blue
150
152
:return:
151
153
"""
152
- self .led_state = led_state & 0xFF
153
- self .packeter .packetC1B (ord ('L' ), self .led_state )
154
+ self .led_state [ 0 ] = led_state & 0xFF
155
+ self .packeter .packetC1B (ord ('L' ), self .led_state [ 0 ] )
154
156
uart .write (self .packeter .msg [0 :self .packeter .msg_size ])
155
157
156
158
def set_builtin_led (self , value : bool ):
157
- if self .led_state is None :
159
+ """
160
+ Turns on/off the builtin led
161
+ :param value:
162
+ :return:
163
+ """
164
+ if self .led_state [0 ] is None :
158
165
self ._set_leds (0x00 )
159
- self .led_state = self .led_state | 0b00000001 if value else self .led_state & 0b11111110
160
- self ._set_leds (self .led_state )
166
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b00000001 if value else self .led_state [ 0 ] & 0b11111110
167
+ self ._set_leds (self .led_state [ 0 ] )
161
168
162
169
def set_illuminator (self , value : bool ):
163
- if self .led_state is None :
170
+ """
171
+ Turns on/off the illuminator led
172
+ :param value:
173
+ :return:
174
+ """
175
+ if self .led_state [0 ] is None :
164
176
self ._set_leds (0x00 )
165
- self .led_state = self .led_state | 0b00000010 if value else self .led_state & 0b11111101
166
- self ._set_leds (self .led_state )
177
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b00000010 if value else self .led_state [ 0 ] & 0b11111101
178
+ self ._set_leds (self .led_state [ 0 ] )
167
179
168
180
def set_left_led_color (self , red : bool , green : bool , blue : bool ):
169
- if self .led_state is None :
181
+ """
182
+ Sets the r,g,b state of the left LED
183
+ :param red:
184
+ :param green:
185
+ :param blue:
186
+ :return:
187
+ """
188
+ if self .led_state [0 ] is None :
170
189
self ._set_leds (0x00 )
171
- self .led_state = self .led_state | 0b00000100 if red else self .led_state & 0b11111011
172
- self .led_state = self .led_state | 0b00001000 if green else self .led_state & 0b11110111
173
- self .led_state = self .led_state | 0b00010000 if blue else self .led_state & 0b11101111
174
- self ._set_leds (self .led_state )
190
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b00000100 if red else self .led_state [ 0 ] & 0b11111011
191
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b00001000 if green else self .led_state [ 0 ] & 0b11110111
192
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b00010000 if blue else self .led_state [ 0 ] & 0b11101111
193
+ self ._set_leds (self .led_state [ 0 ] )
175
194
176
195
def set_right_led_color (self , red : bool , green : bool , blue : bool ):
177
- if self .led_state is None :
196
+ """
197
+ Sets the r,g,b state of the right LED
198
+ :param red:
199
+ :param green:
200
+ :param blue:
201
+ :return:
202
+ """
203
+ if self .led_state [0 ] is None :
178
204
self ._set_leds (0x00 )
179
- self .led_state = self .led_state | 0b00100000 if red else self .led_state & 0b11011111
180
- self .led_state = self .led_state | 0b01000000 if green else self .led_state & 0b10111111
181
- self .led_state = self .led_state | 0b10000000 if blue else self .led_state & 0b01111111
182
- self ._set_leds (self .led_state )
205
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b00100000 if red else self .led_state [ 0 ] & 0b11011111
206
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b01000000 if green else self .led_state [ 0 ] & 0b10111111
207
+ self .led_state [ 0 ] = self .led_state [ 0 ] | 0b10000000 if blue else self .led_state [ 0 ] & 0b01111111
208
+ self ._set_leds (self .led_state [ 0 ] )
183
209
184
210
def _update (self , delay_ = 1 ):
185
211
"""
@@ -364,3 +390,29 @@ def set_position(self, position: float, unit: str = 'deg'):
364
390
"""
365
391
self ._packeter .packetC2B1F (ord ('W' ), self ._label & 0xFF , ord ('P' ), position )
366
392
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
393
+
394
+
395
+ class ArduinoAlvikRgbLed :
396
+ def __init__ (self , packeter : ucPack , label : str , led_state : list [int ], rgb_mask : list [int ]):
397
+ self ._packeter = packeter
398
+ self .label = label
399
+ self ._rgb_mask = rgb_mask
400
+ self ._led_state = led_state
401
+
402
+ def set_color (self , red : bool , green : bool , blue : bool ):
403
+ """
404
+ Sets the LED's r,g,b state
405
+ :param red:
406
+ :param green:
407
+ :param blue:
408
+ :return:
409
+ """
410
+ led_status = self ._led_state [0 ]
411
+ if led_status is None :
412
+ return
413
+ led_status = led_status | self ._rgb_mask [0 ] if red else led_status & (0b11111111 - self ._rgb_mask [0 ])
414
+ led_status = led_status | self ._rgb_mask [1 ] if green else led_status & (0b11111111 - self ._rgb_mask [1 ])
415
+ led_status = led_status | self ._rgb_mask [2 ] if blue else led_status & (0b11111111 - self ._rgb_mask [2 ])
416
+ self ._led_state [0 ] = led_status
417
+ self ._packeter .packetC1B (ord ('L' ), led_status & 0xFF )
418
+ uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
0 commit comments