Skip to content

Commit 117206f

Browse files
committed
feat: rgb leds as ArduinoAlvik children
1 parent de14198 commit 117206f

File tree

2 files changed

+111
-19
lines changed

2 files changed

+111
-19
lines changed

arduino_alvik.py

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ def __init__(self):
1515
self.packeter = ucPack(200)
1616
self.left_wheel = ArduinoAlvikWheel(self.packeter, ord('L'))
1717
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])
1821
self._update_thread_running = False
1922
self._update_thread_id = None
2023
self.l_speed = None
2124
self.r_speed = None
2225
self.battery_perc = None
2326
self.touch_bits = None
2427
self.behaviour = None
25-
self.led_state = None
2628
self.red = None
2729
self.green = None
2830
self.blue = None
@@ -149,37 +151,61 @@ def _set_leds(self, led_state: int):
149151
5->right_red 6->right_green 7->right_blue
150152
:return:
151153
"""
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])
154156
uart.write(self.packeter.msg[0:self.packeter.msg_size])
155157

156158
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:
158165
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])
161168

162169
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:
164176
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])
167179

168180
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:
170189
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])
175194

176195
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:
178204
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])
183209

184210
def _update(self, delay_=1):
185211
"""
@@ -364,3 +390,29 @@ def set_position(self, position: float, unit: str = 'deg'):
364390
"""
365391
self._packeter.packetC2B1F(ord('W'), self._label & 0xFF, ord('P'), position)
366392
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])

examples/rgb_leds_setting.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from arduino_alvik import ArduinoAlvik
2+
from time import sleep_ms
3+
import sys
4+
5+
alvik = ArduinoAlvik()
6+
alvik.begin()
7+
8+
while True:
9+
try:
10+
alvik._set_leds(0xff)
11+
sleep_ms(1000)
12+
alvik._set_leds(0x00)
13+
sleep_ms(1000)
14+
alvik.set_builtin_led(1)
15+
sleep_ms(1000)
16+
alvik.set_illuminator(1)
17+
sleep_ms(1000)
18+
alvik.set_builtin_led(0)
19+
sleep_ms(1000)
20+
alvik.set_illuminator(0)
21+
sleep_ms(1000)
22+
alvik.left_led.set_color(0, 0, 1)
23+
sleep_ms(1000)
24+
alvik.left_led.set_color(0, 1, 0)
25+
sleep_ms(1000)
26+
alvik.left_led.set_color(1, 0, 0)
27+
sleep_ms(1000)
28+
alvik.left_led.set_color(1, 1, 1)
29+
sleep_ms(1000)
30+
alvik.right_led.set_color(0, 0, 1)
31+
sleep_ms(1000)
32+
alvik.right_led.set_color(0, 1, 0)
33+
sleep_ms(1000)
34+
alvik.right_led.set_color(1, 0, 0)
35+
sleep_ms(1000)
36+
alvik.right_led.set_color(1, 1, 1)
37+
sleep_ms(1000)
38+
except KeyboardInterrupt as e:
39+
print('over')
40+
sys.exit()

0 commit comments

Comments
 (0)