From b388b8100692698e938a18552d671bfba928ad50 Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Wed, 9 Oct 2024 12:47:11 +0200 Subject: [PATCH 1/3] feat: alvik _battery_is_charging info --- arduino_alvik/arduino_alvik.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/arduino_alvik/arduino_alvik.py b/arduino_alvik/arduino_alvik.py index 476e000..7b63d96 100644 --- a/arduino_alvik/arduino_alvik.py +++ b/arduino_alvik/arduino_alvik.py @@ -42,6 +42,7 @@ def __init__(self): self.right_led = self.DL2 = _ArduinoAlvikRgbLed(self._packeter, 'right', self._led_state, rgb_mask=[0b00100000, 0b01000000, 0b10000000]) self._battery_perc = None + self._battery_is_charging = None self._touch_byte = None self._move_byte = None self._behaviour = None @@ -92,10 +93,11 @@ def is_on() -> bool: return CHECK_STM32.value() == 1 @staticmethod - def _progress_bar(percentage: float) -> None: + def _print_battery_status(percentage: float, is_charging) -> None: """ - Prints a progressbar - :param percentage: + Pretty prints the battery status + :param percentage: SOC of the battery + :param is_charging: True if the battery is charging :return: """ sys.stdout.write(bytes('\r'.encode('utf-8'))) @@ -103,7 +105,8 @@ def _progress_bar(percentage: float) -> None: marks_str = ' \U0001F50B' else: marks_str = ' \U0001FAAB' - word = marks_str + f" {percentage}% \t" + charging_str = f' \U0001F50C' if is_charging else ' \U000026A0WARNING: battery is discharging!' + word = marks_str + f" {percentage}%" + charging_str + " \t" sys.stdout.write(bytes((word.encode('utf-8')))) def _lenghty_op(self, iterations=10000000) -> int: @@ -140,8 +143,9 @@ def _idle(self, delay_=1, check_on_thread=False, blocking=False) -> None: soc_raw = struct.unpack('h', self.i2c.readfrom(0x36, 2))[0] soc_perc = soc_raw * 0.00390625 - self._battery_perc = soc_perc - self._progress_bar(round(soc_perc)) + self._battery_is_charging = soc_perc > 0 + self._battery_perc = abs(soc_perc) + self._print_battery_status(round(soc_perc), self._battery_is_charging) if blocking: self._lenghty_op(10000) else: @@ -671,7 +675,9 @@ def _parse_message(self) -> int: _, self._ax, self._ay, self._az, self._gx, self._gy, self._gz = self._packeter.unpacketC6F() elif code == ord('p'): # battery percentage - _, self._battery_perc = self._packeter.unpacketC1F() + _, battery_perc = self._packeter.unpacketC1F() + self._battery_is_charging = battery_perc > 0 + self._battery_perc = abs(battery_perc) elif code == ord('d'): # distance sensor _, self._left_tof, self._center_tof, self._right_tof = self._packeter.unpacketC3I() From 7835a2a54332b576933dd4f930fcc2946a25db48 Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Wed, 9 Oct 2024 14:48:05 +0200 Subject: [PATCH 2/3] mod: alvik.begin activates battery check behaviour --- arduino_alvik/arduino_alvik.py | 1 + 1 file changed, 1 insertion(+) diff --git a/arduino_alvik/arduino_alvik.py b/arduino_alvik/arduino_alvik.py index 7b63d96..748231c 100644 --- a/arduino_alvik/arduino_alvik.py +++ b/arduino_alvik/arduino_alvik.py @@ -223,6 +223,7 @@ def begin(self) -> int: self._snake_robot(2000) self.set_illuminator(True) self.set_behaviour(1) + self.set_behaviour(2) self._set_color_reference() if self._has_events_registered(): print('Starting events thread') From 91f3bb461aa777658e8f061dc0125b9b74f1108c Mon Sep 17 00:00:00 2001 From: Lucio Rossi Date: Wed, 9 Oct 2024 17:56:42 +0200 Subject: [PATCH 3/3] feat: alvik.is_battery_charging --- arduino_alvik/arduino_alvik.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arduino_alvik/arduino_alvik.py b/arduino_alvik/arduino_alvik.py index 748231c..0b89d64 100644 --- a/arduino_alvik/arduino_alvik.py +++ b/arduino_alvik/arduino_alvik.py @@ -733,6 +733,13 @@ def get_battery_charge(self) -> int | None: return 100 return round(self._battery_perc) + def is_battery_charging(self) -> bool: + """ + Returns True if the device battery is charging + :return: + """ + return self._battery_is_charging + @property def _touch_bits(self) -> int: """