diff --git a/src/main.py b/src/main.py index 376f2a6..28599c9 100644 --- a/src/main.py +++ b/src/main.py @@ -12,7 +12,7 @@ from gps_hat import GPS_DATA from sens_hat import SENS_HAT from selecta_mode import SelectaMode -selecta = None +# selecta = None def update_hat_data(): if 0: # if gps.get_gps_info(): @@ -166,13 +166,13 @@ if __name__ == "__main__": sens.led_set_pixel(1, 0, 255, 0, 0) - # if not gps.enter_sim_pin(): - # exit(1) - # - # sens.led_set_pixel(2, 0, 255, 0, 0) - # - # if not gps.LTE_hat_start(): - # exit(1) + if not gps.enter_sim_pin(): + exit(1) + + sens.led_set_pixel(2, 0, 255, 0, 0) + + if not gps.LTE_hat_start(): + exit(1) sens.led_set_pixel(3, 0, 255, 0, 0) @@ -197,10 +197,19 @@ if __name__ == "__main__": update_hat_data() update_timer = time.time() - if selecta is not None: - selecta.update() + selecta.update() - run = not sens.detect_long_press() + for event in sens.sense.stick.get_events(): + if event.direction == "middle": + run = not sens.detect_long_press(event) + if event.direction == "up": + if event.action == "pressed": + print("start selecta_mode") + selecta.activate() + if event.direction == "down": + if event.action == "pressed": + print("stop selecta_mode") + selecta.deactivate() time.sleep(0.01) @@ -211,5 +220,5 @@ if __name__ == "__main__": t.join() # warten bis der thread fertig ist gps.ser.close() client.disconnect() - # subprocess.run(["sudo", "shutdown", "-h", "0"]) + subprocess.run(["sudo", "shutdown", "-h", "0"]) sys.exit(0) diff --git a/src/selecta_mode.py b/src/selecta_mode.py index ce764b6..6f381ab 100644 --- a/src/selecta_mode.py +++ b/src/selecta_mode.py @@ -14,9 +14,6 @@ Usage from main.py: ... selecta.update() -Controls: - Sense HAT joystick UP -> activate Selecta mode - Sense HAT joystick DOWN -> deactivate Selecta mode MQTT topics: MOBKOM/SELECTA/state @@ -124,10 +121,6 @@ class SelectaMode: self.forward_ready = True self.forward_neutral_angle = 0.0 - self._pending_activate = False - self._pending_deactivate = False - self._install_joystick_callbacks() - # ------------------------- # Setup / subscriptions # ------------------------- @@ -140,38 +133,6 @@ class SelectaMode: for topic in self.mqtt_topics(): c.subscribe(topic) - def _install_joystick_callbacks(self): - stick = self.sens.stick - # stick = None - # - # # Prefer the SenseHat object inside your wrapper if it exists. - # if hasattr(self.sens, "sense") and hasattr(self.sens.sense, "stick"): - # stick = self.sens.sense.stick - # elif hasattr(self.sens, "stick"): - # stick = self.sens.stick - # else: - # try: - # from sense_hat import SenseHat - # stick = SenseHat().stick - # except Exception as e: - # print("Selecta: joystick callbacks not available:", e) - # return - - def on_up(event): - if getattr(event, "action", "pressed") == "pressed": - self._pending_activate = True - - def on_down(event): - if getattr(event, "action", "pressed") == "pressed": - self._pending_deactivate = True - - try: - stick.direction_up = on_up - stick.direction_down = on_down - print("Selecta: UP aktiviert, DOWN deaktiviert") - except Exception as e: - print("Selecta: could not assign joystick callbacks:", e) - # ------------------------- # Stock persistence # ------------------------- @@ -548,14 +509,6 @@ class SelectaMode: # Called from main loop # ------------------------- def update(self): - if self._pending_activate: - self._pending_activate = False - self.activate() - - if self._pending_deactivate: - self._pending_deactivate = False - self.deactivate() - if self.active: self.handle_tilt() self.render() diff --git a/src/sens_hat.py b/src/sens_hat.py index ed0cf5f..d0e6f65 100644 --- a/src/sens_hat.py +++ b/src/sens_hat.py @@ -71,37 +71,34 @@ class SENS_HAT: for x, col in enumerate(row): self.sense.set_pixel(x, y, col[0], col[1], col[2]) - def detect_long_press(self): + def detect_long_press(self, event): """ Returns True wenn der Taster für 4 Sekunden gedrückt werde. """ - - for event in self.sense.stick.get_events(): - if event.direction == "middle": - if event.action == "pressed": - self.time_down = time.time() + if event.action == "pressed": + self.time_down = time.time() - if event.action == "released": - self.time_down = time.time() - self.led_restore_matrix() + if event.action == "released": + self.time_down = time.time() + self.led_restore_matrix() - if self.time_down + 0.5 < time.time(): - self.sense.clear() + if self.time_down + 0.5 < time.time(): + self.sense.clear() - button_down_time = time.time() - self.time_down - if button_down_time >= 4: - print("shutdown") - return True + button_down_time = time.time() - self.time_down + if button_down_time >= 4: + print("shutdown") + return True - if button_down_time <= 7: - button_down_time_int = int(button_down_time * 2) - else: - button_down_time_int = 7 + if button_down_time <= 7: + button_down_time_int = int(button_down_time * 2) + else: + button_down_time_int = 7 - for y in range(8 - button_down_time_int): - self.sense.set_pixel(7, 7 - y, 255, 0, 0) + for y in range(8 - button_down_time_int): + self.sense.set_pixel(7, 7 - y, 255, 0, 0) return False