@@ -42,6 +42,7 @@ def __init__(self):
42
42
self .right_led = self .DL2 = _ArduinoAlvikRgbLed (self ._packeter , 'right' , self ._led_state ,
43
43
rgb_mask = [0b00100000 , 0b01000000 , 0b10000000 ])
44
44
self ._battery_perc = None
45
+ self ._battery_is_charging = None
45
46
self ._touch_byte = None
46
47
self ._move_byte = None
47
48
self ._behaviour = None
@@ -92,18 +93,20 @@ def is_on() -> bool:
92
93
return CHECK_STM32 .value () == 1
93
94
94
95
@staticmethod
95
- def _progress_bar (percentage : float ) -> None :
96
+ def _print_battery_status (percentage : float , is_charging ) -> None :
96
97
"""
97
- Prints a progressbar
98
- :param percentage:
98
+ Pretty prints the battery status
99
+ :param percentage: SOC of the battery
100
+ :param is_charging: True if the battery is charging
99
101
:return:
100
102
"""
101
103
sys .stdout .write (bytes ('\r ' .encode ('utf-8' )))
102
104
if percentage > 97 :
103
105
marks_str = ' \U0001F50B '
104
106
else :
105
107
marks_str = ' \U0001FAAB '
106
- word = marks_str + f" { percentage } % \t "
108
+ charging_str = f' \U0001F50C ' if is_charging else ' \U000026A0 WARNING: battery is discharging!'
109
+ word = marks_str + f" { percentage } %" + charging_str + " \t "
107
110
sys .stdout .write (bytes ((word .encode ('utf-8' ))))
108
111
109
112
def _lenghty_op (self , iterations = 10000000 ) -> int :
@@ -140,8 +143,9 @@ def _idle(self, delay_=1, check_on_thread=False, blocking=False) -> None:
140
143
141
144
soc_raw = struct .unpack ('h' , self .i2c .readfrom (0x36 , 2 ))[0 ]
142
145
soc_perc = soc_raw * 0.00390625
143
- self ._battery_perc = soc_perc
144
- self ._progress_bar (round (soc_perc ))
146
+ self ._battery_is_charging = soc_perc > 0
147
+ self ._battery_perc = abs (soc_perc )
148
+ self ._print_battery_status (round (soc_perc ), self ._battery_is_charging )
145
149
if blocking :
146
150
self ._lenghty_op (10000 )
147
151
else :
@@ -219,6 +223,7 @@ def begin(self) -> int:
219
223
self ._snake_robot (2000 )
220
224
self .set_illuminator (True )
221
225
self .set_behaviour (1 )
226
+ self .set_behaviour (2 )
222
227
self ._set_color_reference ()
223
228
if self ._has_events_registered ():
224
229
print ('Starting events thread' )
@@ -671,7 +676,9 @@ def _parse_message(self) -> int:
671
676
_ , self ._ax , self ._ay , self ._az , self ._gx , self ._gy , self ._gz = self ._packeter .unpacketC6F ()
672
677
elif code == ord ('p' ):
673
678
# battery percentage
674
- _ , self ._battery_perc = self ._packeter .unpacketC1F ()
679
+ _ , battery_perc = self ._packeter .unpacketC1F ()
680
+ self ._battery_is_charging = battery_perc > 0
681
+ self ._battery_perc = abs (battery_perc )
675
682
elif code == ord ('d' ):
676
683
# distance sensor
677
684
_ , self ._left_tof , self ._center_tof , self ._right_tof = self ._packeter .unpacketC3I ()
@@ -726,6 +733,13 @@ def get_battery_charge(self) -> int | None:
726
733
return 100
727
734
return round (self ._battery_perc )
728
735
736
+ def is_battery_charging (self ) -> bool :
737
+ """
738
+ Returns True if the device battery is charging
739
+ :return:
740
+ """
741
+ return self ._battery_is_charging
742
+
729
743
@property
730
744
def _touch_bits (self ) -> int :
731
745
"""
0 commit comments