Skip to content

Commit a2544df

Browse files
authored
Merge pull request #2 from arduino/thread_fix
Thread fix
2 parents aa24aca + 2314969 commit a2544df

File tree

6 files changed

+25
-15
lines changed

6 files changed

+25
-15
lines changed

arduino_alvik.py

+16-7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@
1313

1414
class ArduinoAlvik:
1515

16+
_update_thread_running = False
17+
_update_thread_id = None
18+
19+
def __new__(cls):
20+
if not hasattr(cls, 'instance'):
21+
cls.instance = super(ArduinoAlvik, cls).__new__(cls)
22+
return cls.instance
23+
1624
def __init__(self):
1725
self.packeter = ucPack(200)
1826
self.left_wheel = _ArduinoAlvikWheel(self.packeter, ord('L'))
@@ -22,8 +30,6 @@ def __init__(self):
2230
rgb_mask=[0b00000100, 0b00001000, 0b00010000])
2331
self.right_led = _ArduinoAlvikRgbLed(self.packeter, 'right', self.led_state,
2432
rgb_mask=[0b00100000, 0b01000000, 0b10000000])
25-
self._update_thread_running = False
26-
self._update_thread_id = None
2733
self.battery_perc = None
2834
self.touch_bits = None
2935
self.behaviour = None
@@ -64,15 +70,18 @@ def _begin_update_thread(self):
6470
Runs robot background operations (e.g. threaded update)
6571
:return:
6672
"""
67-
self._update_thread_running = True
68-
self._update_thread_id = _thread.start_new_thread(self._update, (1,))
6973

70-
def _stop_update_thread(self):
74+
if not self.__class__._update_thread_running:
75+
self.__class__._update_thread_running = True
76+
self.__class__._update_thread_id = _thread.start_new_thread(self._update, (1,))
77+
78+
@classmethod
79+
def _stop_update_thread(cls):
7180
"""
7281
Stops the background operations
7382
:return:
7483
"""
75-
self._update_thread_running = False
84+
cls._update_thread_running = False
7685

7786
def stop(self):
7887
"""
@@ -220,7 +229,7 @@ def _update(self, delay_=1):
220229
:return:
221230
"""
222231
while True:
223-
if not self._update_thread_running:
232+
if not ArduinoAlvik._update_thread_running:
224233
break
225234
if self._read_message():
226235
self._parse_message()

examples/leds_setting.py

+1
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,5 @@
3737
sleep_ms(1000)
3838
except KeyboardInterrupt as e:
3939
print('over')
40+
alvik.stop()
4041
sys.exit()

examples/message_reader.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@
2323
except KeyboardInterrupt as e:
2424
print('over')
2525
alvik.stop()
26-
break
27-
sys.exit()
26+
sys.exit()
27+

examples/read_color_sensor.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@
1313
sleep_ms(100)
1414
except KeyboardInterrupt as e:
1515
print('over')
16-
break
17-
sys.exit()
16+
alvik.stop()
17+
sys.exit()

examples/read_touch.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@
2727
sleep_ms(100)
2828
except KeyboardInterrupt as e:
2929
print('over')
30-
break
31-
sys.exit()
30+
alvik.stop()
31+
sys.exit()

examples/set_pid.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@
1414
sleep_ms(100)
1515
except KeyboardInterrupt as e:
1616
print('over')
17-
break
18-
sys.exit()
17+
alvik.stop()
18+
sys.exit()

0 commit comments

Comments
 (0)