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()
$abcdeabcde151015202530354045505560fghijfghij