| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import asyncio
- import time
- from dataclasses import dataclass
- from robot_control.src.robot.movement import RobotMovement
- from robot_control.src.api.grbl_handler import GRBLHandler
- from robot_control.src.utils.config import RobotConfig, GRBLConfig, MovementConfig, GPIOConfig, MQTTConfig
- from robot_control.src.api.gpio import PiGPIO
- # grbl_config = GRBLConfig(port="debug", baudrate=115200)
- grbl_config = GRBLConfig(port="/dev/ttyACM0", baudrate=115200)
- test_config = MovementConfig(
- speed=1000,
- safe_height=10,
- work_height=0
- )
- grbl_handler = GRBLHandler(
- grbl_config.port,
- grbl_config.baudrate
- )
- movement = RobotMovement(test_config, grbl_handler)
- pump_pin = 17
- valve_pin = 27
- gpio = PiGPIO([pump_pin, valve_pin], [])
- y_offset = 130
- positions = [
- (453, 1028 - y_offset, 0),
- (453, 1028 - y_offset, 107),
- (453, 1028 - y_offset, 0),
- (170, 760 - y_offset, 0),
- (170, 760 - y_offset, 40),
- (170, 760 - y_offset, 0),
- (453, 600 - y_offset, 0), # neutral pos
- ]
- async def wait_for_enter():
- # Use asyncio.Event to coordinate between input and async code
- event = asyncio.Event()
-
- def input_callback():
- input() # Wait for Enter
- event.set()
-
- # Run input in a separate thread to not block the event loop
- loop = asyncio.get_running_loop()
- await loop.run_in_executor(None, input_callback)
- await event.wait()
- async def perform_movement_sequence():
- for idx, pos in enumerate(positions):
- print(f"Moving to position {pos}...")
- if idx == 1:
- gpio.set_pin(pump_pin, 1)
- await asyncio.sleep(5)
- gpio.set_pin(pump_pin, 0)
- if idx == 2:
- gpio.set_pin(valve_pin, 1)
- await asyncio.sleep(0.5)
- if idx == 5:
- gpio.set_pin(valve_pin, 0)
- await asyncio.sleep(0.5)
- await movement.move_to_position(*pos)
- async def test_movement():
- await grbl_handler.connect()
- await movement.perform_homing()
-
- print("Press Enter to start movement sequence (or Ctrl+C to exit)...")
- while True:
- await wait_for_enter()
- print("Starting movement sequence...")
- await perform_movement_sequence()
- print("\nPress Enter to repeat sequence (or Ctrl+C to exit)...")
- if __name__ == "__main__":
- try:
- asyncio.run(test_movement())
- except KeyboardInterrupt:
- print("\nExiting...")
|