diff --git a/walk2.py b/walk2.py index e0562ec..93466db 100644 --- a/walk2.py +++ b/walk2.py @@ -1,7 +1,8 @@ import threading import time +import sys +import select from adafruit_servokit import ServoKit # type: ignore -from pynput import keyboard # Initialize ServoKit kit = ServoKit(channels=16) @@ -99,40 +100,36 @@ def group_2(servo_angles): thread.join() # Main loop control -running = False # Control flag - -def on_press(key): - global running - try: - if key.char == 'w': - running = True - except AttributeError: - pass - -def on_release(key): - global running - if key == keyboard.Key.esc: - return False # Stop listener - try: - if key.char == 'w': - running = False - except AttributeError: - pass +def is_input_available(): + """Check if input is available without blocking.""" + return select.select([sys.stdin], [], [], 0)[0] # Main execution if __name__ == "__main__": - print("Press 'w' to execute movements. Press 'Esc' to exit.") - listener = keyboard.Listener(on_press=on_press, on_release=on_release) - listener.start() + print("Press 'w' to execute movements. Press 'q' to quit.") - while True: - if running: - print("Executing Group 1 movements...") - group_1(DEFAULT_SERVO_ANGLES) - time.sleep(DELAY) + running = False + try: + while True: + if is_input_available(): + input_char = sys.stdin.read(1).strip() + if input_char == 'w': + running = True + elif input_char == 'q': + print("Exiting...") + break + else: + running = False - print("Executing Group 2 movements...") - group_2(DEFAULT_SERVO_ANGLES) - time.sleep(DELAY) - else: - time.sleep(0.1) # Idle loop + if running: + print("Executing Group 1 movements...") + group_1(DEFAULT_SERVO_ANGLES) + time.sleep(DELAY) + + print("Executing Group 2 movements...") + group_2(DEFAULT_SERVO_ANGLES) + time.sleep(DELAY) + else: + time.sleep(0.1) # Idle loop + except KeyboardInterrupt: + print("\nProgram terminated.")