from machine import Pin
import rp2
import time
# Set up the button on pin 1
button = Pin(1, Pin.IN, Pin.PULL_UP)
# Define PIO program for controlling stepper motor (10Hz, Counterclockwise)
@rp2.asm_pio(set_init=(rp2.PIO.OUT_LOW,)*4)
def stepper():
label("start")
# Step 1: Pin 21 (A-negative) = High, others = Low
set(pins, 2)
set(x, 5) # Delay loop (5 * 32 cycles = 160 cycles)
label("delay1")
nop() [31] # Delay loop
jmp(x_dec, "delay1")
# Step 2: Pin 20 (A-positive) = High, others = Low
set(pins, 8)
set(x, 5) # Delay loop (5 * 32 cycles = 160 cycles)
label("delay2")
nop() [31] # Delay loop
jmp(x_dec, "delay2")
# Step 3: Pin 19 (B-positive) = High, others = Low
set(pins, 1)
set(x, 5) # Delay loop (5 * 32 cycles = 160 cycles)
label("delay3")
nop() [31] # Delay loop
jmp(x_dec, "delay3")
# Step 4: Pin 18 (B-negative) = High, others = Low
set(pins, 4)
set(x, 5) # Delay loop (5 * 32 cycles = 160 cycles)
label("delay4")
nop() [31] # Delay loop
jmp(x_dec, "delay4")
# Define PIO program for blinking LED at 2Hz
@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink_2hz():
set(pins, 1) # Set GPIO high (LED on)
set(x, 61) # Delay for 500ms
label("delay_high")
nop() [31]
jmp(x_dec, "delay_high")
set(pins, 0) # Set GPIO low (LED off)
set(x, 61) # Delay for 500ms
label("delay_low")
nop() [31]
jmp(x_dec, "delay_low")
# Create and start the StateMachine for stepper motor
def activate_stepper():
sm = rp2.StateMachine(0, stepper, freq=2000, set_base=Pin(18)) # Pins 18-21 for stepper motor
sm.active(1)
return sm
# Create and start the StateMachine for blinking LED
def activate_led():
sm = rp2.StateMachine(1, blink_2hz, freq=2000, set_base=Pin(2)) # Pin 25 for LED
sm.active(1)
return sm
# Main loop to control LED and stepper motor
sm_stepper = None
sm_led = None
while True:
if button.value() == 0: # Button pressed
print("Button is pressed = (LED Blinking 2Hz)")
if sm_stepper is not None:
sm_stepper.active(0) # Deactivate stepper
if sm_led is None or not sm_led.active():
sm_led = activate_led() # Activate LED blinking
while button.value() == 0: # Wait for button release
time.sleep(0.1) # Debounce
else: # Button not pressed
print("Button not pressed = (LED is ON) | (Stepper 10Hz)")
led = Pin(2, Pin.OUT)
led.low()
if sm_led is not None:
sm_led.active(0)
if sm_stepper is None or not sm_stepper.active():
sm_stepper = activate_stepper() # Activate stepper motor
time.sleep(0.1)