from machine import Pin, PWM, ADC, Timer
import time
joy_Y = ADC(Pin(27))
joy_Y.atten(ADC.ATTN_11DB)
joy_X = ADC(Pin(26))
joy_X.atten(ADC.ATTN_11DB)
led_vertical = Pin(17, Pin.OUT)
led_horizontal = Pin(16, Pin.OUT)
LedInt = Pin(21, Pin.OUT)
strt_btn = Pin(5, Pin.IN, Pin.PULL_UP)
led_timer_vertical = Timer(0)
led_timer_horizontal = Timer(1)
emergency_flag = False
flag = False
flag1 = False
flag2 = False
flag3 = False
def turn_on_vertical(x):
global flag, flag2
if flag:
if flag2:
led_vertical.on()
flag2 = False
else:
led_vertical.off()
flag2 = True
else:
led_vertical.off()
def turn_on_horizontal(x):
global flag1, flag3
if flag1:
if flag3:
led_horizontal.on()
flag3 = False
else:
led_horizontal.off()
flag3 = True
else:
led_horizontal.off()
def emergency_stop(x):
global emergency_flag
while strt_btn.value() == 1:
pass
if not emergency_flag:
emergency_flag = True
LedInt.on()
print(emergency_flag)
else:
emergency_flag = False
LedInt.off()
print(emergency_flag)
def y_axis_movement():
global emergency_flag
servo_pwm = PWM(Pin(19), freq=50)
angle = 90
while True:
if strt_btn.value():
if not emergency_flag:
y_axis = joy_Y.read()
# Mapping the range of joystick readings to the range of pulse widths
pulse_width = int((y_axis - 0) * (123 - 26) / (4095 - 0) + 26)
servo_pwm.duty(pulse_width)
time.sleep(0.075)
def x_axis_movement():
global flag, flag1, emergency_flag
servo_pwm = PWM(Pin(18), freq=50)
angle = 90
while True:
if strt_btn.value():
if not emergency_flag:
x_axis = joy_X.read()
# Mapping the range of joystick readings to the range of pulse widths
pulse_width = int((x_axis - 0) * (123 - 26) / (4095 - 0) + 26)
servo_pwm.duty(pulse_width)
if x_axis < 505:
angle -= 2
angle = max(0, angle)
flag = True
elif x_axis > 520:
angle += 2
angle = min(180, angle)
flag1 = True
time.sleep(0.075)
led_timer_vertical.init(period=300, mode=Timer.PERIODIC, callback=turn_on_vertical)
led_timer_horizontal.init(period=300, mode=Timer.PERIODIC, callback=turn_on_horizontal)
Interruption = Pin(4, Pin.IN, pull=Pin.PULL_DOWN)
Interruption.irq(trigger=Pin.IRQ_RISING, handler=emergency_stop)
while True:
y_axis_movement()
x_axis_movement()