this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 82 lines 2.4 kB view raw
1import board 2import time 3import digitalio 4import supervisor 5 6class MotorState: 7 def __init__(self, step_pin, dir_pin, min_delay=0.001): 8 self.step_pin = step_pin 9 self.dir_pin = dir_pin 10 self.position = 0 11 self.min_delay = min_delay 12 13 def step(self): 14 self.step_pin.value = True 15 time.sleep(self.min_delay) 16 self.step_pin.value = False 17 time.sleep(self.min_delay) 18 19# Define pins for stepper motors 20motor1_step = digitalio.DigitalInOut(board.GP11) 21motor1_step.direction = digitalio.Direction.OUTPUT 22motor1_dir = digitalio.DigitalInOut(board.GP10) 23motor1_dir.direction = digitalio.Direction.OUTPUT 24motor2_step = digitalio.DigitalInOut(board.GP8) 25motor2_step.direction = digitalio.Direction.OUTPUT 26motor2_dir = digitalio.DigitalInOut(board.GP7) 27motor2_dir.direction = digitalio.Direction.OUTPUT 28enable = digitalio.DigitalInOut(board.GP9) 29enable.direction = digitalio.Direction.OUTPUT 30 31# Enable motors 32enable.value = False 33print("Motors enabled") 34 35STEPS_PER_ROT = 200 * 16 # Steps per rotation 36 37motor1 = MotorState(motor1_step, motor1_dir, 0.0001) 38motor2 = MotorState(motor2_step, motor2_dir, 0.0001) 39 40while True: 41 if supervisor.runtime.serial_bytes_available: 42 command = input().strip().lower() 43 parts = command.split() 44 45 if len(parts) != 2: 46 print("Invalid command. Use '[motor#] [position/zero]'") 47 continue 48 49 motor_num = int(parts[0]) 50 target = parts[1] 51 52 if motor_num not in [1,2]: 53 print("Invalid motor number. Use 1 or 2") 54 continue 55 56 motor = motor1 if motor_num == 1 else motor2 57 58 try: 59 if target == "zero": 60 motor.position = 0 61 print(f"Motor {motor_num} position zeroed") 62 continue 63 64 target_pos = float(target) * STEPS_PER_ROT 65 steps = int(target_pos - motor.position) 66 67 if steps > 0: 68 motor.dir_pin.value = True 69 else: 70 motor.dir_pin.value = False 71 steps = -steps 72 73 print(f"Moving motor {motor_num} to position {target} rotations...") 74 75 for _ in range(steps): 76 motor.step() 77 78 motor.position = target_pos 79 print(f"Motor {motor_num} movement complete") 80 81 except ValueError: 82 print("Invalid position. Use number or 'zero'")